Seite 1 von 1

lisp + python = lisPy

Verfasst: Sonntag 10. Juni 2007, 20:46
von Costi
ich bin noch laengst nicht fertig, aber mein "lisPy" hat jetz angefangen einfache scripts auszufuehren
vieleicht interesierts nhemanden
die source findet ihr hier http://paste.pocoo.org/show/1572/ <-- DOH! ich hab dialect (eng.) mit k geschrieben

wenn wir zb folgendes ausfuehren:

Code: Alles auswählen

(= 'alles' '')  (# die evaluating methode is richtig fett)  (while (= 'str' (raw_input 'string_eingeben:'))
    (= 'alles' (+ alles str) ))
(print alles) 
macht er sogar was da steht und erklaert uns genau was da vorgeht:

Code: Alles auswählen

python '/home/kirsch/Desktop/plisp/lispy5.py' 
parse got: (progn(= 'alles' '')  (# die evaluating methode is richtig fett)  (while (= 'str' (raw_input 'string_eingeben:'))    (= 'alles' (+ alles str) ))(print alles) )
<hier wurde etwas gesnippt>
parsed it to:     [[<vars.get>, 'progn'], [[<vars.get>, '='], 'alles', ''], [[<vars.get>, '#'], [<vars.get>, 'die'], [<vars.get>, 'evaluating'], [<vars.get>, 'methode'], [<vars.get>, 'is'], [<vars.get>, 'richtig'], [<vars.get>, 'fett']], [[<vars.get>, 'while'], [[<vars.get>, '='], 'str', [[<vars.get>, 'raw_input'], 'string_eingeben:']], [[<vars.get>, '='], 'alles', [[<vars.get>, '+'], [<vars.get>, 'alles'], [<vars.get>, 'str']]]], [[<vars.get>, 'print'], [<vars.get>, 'alles']]] 

           =========== GO ==========
(do     arg:  [[<vars.get>, 'progn'], [[<vars.get>, '='], 'alles', ''], [[<vars.get>, '#'], [<vars.get>, 'die'], [<vars.get>, 'evaluating'], [<vars.get>, 'methode'], [<vars.get>, 'is'], [<vars.get>, 'richtig'], [<vars.get>, 'fett']], [[<vars.get>, 'while'], [[<vars.get>, '='], 'str', [[<vars.get>, 'raw_input'], 'string_eingeben:']], [[<vars.get>, '='], 'alles', [[<vars.get>, '+'], [<vars.get>, 'alles'], [<vars.get>, 'str']]]], [[<vars.get>, 'print'], [<vars.get>, 'alles']]] 
(do     arg:  [<vars.get>, 'progn'] 
(do     arg:  <vars.get> 
) returning: <vars.get> 
) returning: <function progn at 0xb7d63a74> 
 | (progn     arg:  ([[<vars.get>, '='], 'alles', ''], [[<vars.get>, '#'], [<vars.get>, 'die'], [<vars.get>, 'evaluating'], [<vars.get>, 'methode'], [<vars.get>, 'is'], [<vars.get>, 'richtig'], [<vars.get>, 'fett']], [[<vars.get>, 'while'], [[<vars.get>, '='], 'str', [[<vars.get>, 'raw_input'], 'string_eingeben:']], [[<vars.get>, '='], 'alles', [[<vars.get>, '+'], [<vars.get>, 'alles'], [<vars.get>, 'str']]]], [[<vars.get>, 'print'], [<vars.get>, 'alles']]) 
 |  | (do     arg:  [[<vars.get>, '='], 'alles', ''] 
 |  | (do     arg:  [<vars.get>, '='] 
 |  | (do     arg:  <vars.get> 
 |  | ) returning: <vars.get> 
 |  | ) returning: <function set at 0xb7d63994> 
 |  |  | (do     arg:  '' 
 |  |  | ) returning: '' 
 |  |  | (do     arg:  'alles' 
 |  |  | ) returning: 'alles' 
 |  |  | (do     arg:  'alles' 
 |  |  | ) returning: 'alles' 
 |  | ) returning: '' 
 |  | (do     arg:  [[<vars.get>, '#'], [<vars.get>, 'die'], [<vars.get>, 'evaluating'], [<vars.get>, 'methode'], [<vars.get>, 'is'], [<vars.get>, 'richtig'], [<vars.get>, 'fett']] 
 |  | (do     arg:  [<vars.get>, '#'] 
 |  | (do     arg:  <vars.get> 
 |  | ) returning: <vars.get> 
 |  | ) returning: <function comment at 0xb7d63aac> 
 |  | ) returning: None 
 |  | (do     arg:  [[<vars.get>, 'while'], [[<vars.get>, '='], 'str', [[<vars.get>, 'raw_input'], 'string_eingeben:']], [[<vars.get>, '='], 'alles', [[<vars.get>, '+'], [<vars.get>, 'alles'], [<vars.get>, 'str']]]] 
 |  | (do     arg:  [<vars.get>, 'while'] 
 |  | (do     arg:  <vars.get> 
 |  | ) returning: <vars.get> 
 |  | ) returning: <function while_ at 0xb7d63b54> 
 |  |  | (do     arg:  [[<vars.get>, '='], 'str', [[<vars.get>, 'raw_input'], 'string_eingeben:']] 
 |  |  | (do     arg:  [<vars.get>, '='] 
 |  |  | (do     arg:  <vars.get> 
 |  |  | ) returning: <vars.get> 
 |  |  | ) returning: <function set at 0xb7d63994> 
 |  |  |  | (do     arg:  [[<vars.get>, 'raw_input'], 'string_eingeben:'] 
 |  |  |  | (do     arg:  [<vars.get>, 'raw_input'] 
 |  |  |  | (do     arg:  <vars.get> 
 |  |  |  | ) returning: <vars.get> 
 |  |  |  | ) returning: <built-in function raw_input> 
string_eingeben:

edit:
was is eigentlich mit noodle, ist das auch in python geschrieben und wirds noch entwickelt?

Verfasst: Sonntag 10. Juni 2007, 21:59
von rolgal_reloaded
Hallo,

warum ist es interessant Lisp in bzw. mit Python auszuführen.
Wofür braucht man sowas?

LG

rolgal_reloaded

Verfasst: Sonntag 10. Juni 2007, 22:08
von mq
Und was fuer einen Lisp-Dialekt willst du da schlussendlich implementieren? Irgendwie ist es sinnfrei, noch einen zu erfinden, den eh keiner benutzen wird...

Verfasst: Sonntag 10. Juni 2007, 22:11
von veers
rolgal_reloaded hat geschrieben:Hallo,

warum ist es interessant Lisp in bzw. mit Python auszuführen.
Wofür braucht man sowas?

LG

rolgal_reloaded
Zum Spass an der Freude würde ich mal sagen ;)

PyPy kann anscheinend seinen Python Interpreter nach Common Lisp kompilieren ;)

PS: ARGH, wieso muss pypy.de die Seite eine Bordells sein und ist bei Google auch noch höher gerankt!

Verfasst: Sonntag 10. Juni 2007, 22:14
von rolgal_reloaded
veers hat geschrieben:Zum Spass an der Freude würde ich mal sagen ;)
Ist ja auch ein gutes Motiv.

Verfasst: Sonntag 10. Juni 2007, 22:16
von mq
veers hat geschrieben:PyPy kann anscheinend seinen Python Interpreter nach Common Lisp kompilieren ;)
Zumindest existiert ein Common Lisp-Backend, die Frage ist, wie gut das gepflegt ist (iirc funktioniert das nicht vollstaendig).
Was eigentlich noch eher zum Thema passen wuerde: irgendwo im PyPy-SVN-Repo fliegen Teile eines Scheme-Interpreters rum, der in rpython und auf Basis der PyPy-Toolchain geschrieben ist, ich glaube, das ist ein SoC-Projekt. Das waere vllt. nochmal interessant zum Angucken, wenn's schon einigermassen vollstaendig ist.

Edit:
Okay, das sind nichtmal 300 LOC. Also vermutlich noch nicht so~ viel interessantes :D

Verfasst: Sonntag 10. Juni 2007, 22:44
von BlackVivi
rolgal_reloaded hat geschrieben:
veers hat geschrieben:Zum Spass an der Freude würde ich mal sagen ;)
Ist ja auch ein gutes Motiv.
Ohne Langeweile hätten die Menschen nie gute Sachen erfunden, glaub man oO

@Topic
Find die Idee schön. Vllt lässt sich Common Lisp mit einem Python "Compiler" besser "debuggen" oder einbetten... Das wär fein.

Verfasst: Sonntag 10. Juni 2007, 22:55
von rolgal_reloaded
@BlackVivi

Deine Signatur ist indiskutabel!

Verfasst: Sonntag 10. Juni 2007, 23:48
von veers
rolgal_reloaded hat geschrieben:@BlackVivi

Deine Signatur ist indiskutabel!
Und was hat das mit dem Topic zu tun?
Abgesehen davon, so what? Willst du seine Posts nun als Jugendgefährdend deklarieren und verbieten lassen? Ich meine sie könnten ja gesunde Jugendliche zu Sexualstraftätern machen!

Lisp/Scheme nach Python Bytecode wäre auch noch interessant. Wäre ein weiterer Lisp Compiler/Interpreter welcher die Welt nicht braucht. Aber bevor ich so etwas Anfange muss ich wohl Lisp lernen.

Verfasst: Montag 11. Juni 2007, 08:37
von BlackJack
Die Signatur hat soviel wie die Anmerkung dazu mit dem Thema zu tun: Beide sind hier zu lesen.

Und ich denke es geht nicht darum, ob das jemand als "Handlungsanweisung" benutzt, sondern wie es auf Leser wirkt. Insbesondere auf weibliche. Und vielleicht sogar welche die schon mal Erfahrung in die Richtung machen mussten. Wobei ich jetzt noch nicht mal eine "richtige" Vergewaltigung meine, sondern das "übliche" grabschen. Aber die sollen sich nicht so anstellen, ist ja nur eine kleine "Überraschung" gewesen. Oder?

Verfasst: Montag 11. Juni 2007, 10:18
von gerold
rolgal_reloaded hat geschrieben:@BlackVivi
Deine Signatur ist indiskutabel!
@BlackVivi: Ändere deine Signatur.

Verfasst: Montag 11. Juni 2007, 13:32
von BlackVivi
BlackJack hat geschrieben:Die Signatur hat soviel wie die Anmerkung dazu mit dem Thema zu tun: Beide sind hier zu lesen.

Und ich denke es geht nicht darum, ob das jemand als "Handlungsanweisung" benutzt, sondern wie es auf Leser wirkt. Insbesondere auf weibliche. Und vielleicht sogar welche die schon mal Erfahrung in die Richtung machen mussten. Wobei ich jetzt noch nicht mal eine "richtige" Vergewaltigung meine, sondern das "übliche" grabschen. Aber die sollen sich nicht so anstellen, ist ja nur eine kleine "Überraschung" gewesen. Oder?
Mhm, ihr misintepretiert meine Signatur vollkommen. Aber ich ändere sie natürlich, wenn ihr darauf besteht. Bin ja niemand, der sich zwanghaft an so etwas banalen klammert ;)

Ich gehör übrigens zu den Leuten, die sehr negative Erfahrungen damit gemacht hat... Aber lassen wir das.

Verfasst: Montag 11. Juni 2007, 14:21
von apollo13
gerold hat geschrieben:
rolgal_reloaded hat geschrieben:@BlackVivi
Deine Signatur ist indiskutabel!
@BlackVivi: Ändere deine Signatur.
Lol?

Verfasst: Montag 11. Juni 2007, 14:37
von rolgal_reloaded
@BlackVivi

Diese Aussage in Form einer Signatur kann man nur misinterpretieren.
Wenn es ein Kaberettist bringt, der einen gehirnlosen Vollidioten mimt, der z. Bsp. eine entsprechende Handlung damit rechtfertigen will, dann ist das was anderes. Es ist dann wenigstens diskutabel.
Vgl. hierzu Hader im Keller.

@apollo13

Haben gerold oder ich irgendwas Witziges versäumt?

Verfasst: Montag 11. Juni 2007, 14:44
von gerold
Ich bitte darum, das Signatur-Thema hier nicht weiter zu verfolgen. In diesem Board dreht sich alles um Python.

Wenn das nicht so bleibt, dann lässt sich dieses Board mit unseren geringen Mitteln nicht mehr rechtlich absichern. Das wäre das AUS für dieses Board.

mfg
Gerold

Verfasst: Montag 11. Juni 2007, 16:15
von Costi
also back2topic:

ein meiner problemen, ist folgendes:
variablen werden in einen dict gespeichert
und mann greift logischer weise mit einen string auf sie zu
ich kann jetzt aber nicht sagen das alle strings die so rumliegen eigentlich variable sind.
deswegen haben wir die funktion ``$``, die anhand eines strings uns die zugehoerige variable gibt
und sowas wie:

Code: Alles auswählen

(print myvar)
ist nur syntactic sugar fuer

Code: Alles auswählen

(print ($ 'myvar'))
lange rede kuerzer sinn:
ist es nicht besser wenn variabeln strings sind und echte string geschuetzt werden, zb mit

Code: Alles auswählen

(" strings werden nicht evaluated)

Verfasst: Montag 11. Juni 2007, 17:32
von BlackJack
Ich sehe das Problem nicht ganz, dass Du lösen willst. Wenn man den Inhalt einer Variablen aussgibt, würde ich ``(print name)`` erwarten und wenn man eine Zeichenkette ausgeben will ``(print "name")``.

Das `=` als erstes Argument eine Zeichenkette erwartet und keinen Namen, ist etwas unerwartet. In `noodle` würde man Dein Beispielprogramm 1:1 umgesetzt so schreiben:

Code: Alles auswählen

(= alles '')
(comment die evaluating methode ist richtig fett)
(while (= str (raw_input "string eingeben:"))
    (= alles (+ alles str)))
(print alles)
Da das Zusammensetzen von Zeichenketten in einer Schleife langsam ist, wäre wohl folgendes "pythonischer":

Code: Alles auswählen

(= alles (list))
# die evaluating methode ist richtig fett
(while (= string (raw_input "string eingeben:"))
    (.alles.append string))
(print (."\n".join alles))

Verfasst: Dienstag 12. Juni 2007, 13:35
von Leonidas
lumax hat geschrieben:Edit:
Okay, das sind nichtmal 300 LOC. Also vermutlich noch nicht so~ viel interessantes :D
Zu bedenken ist, dass Scheme wirklich nicht so kompliziert zu implementieren ist. Im Scheme-Standardwerk SICP wird im Laufe des Buches eine eigene Scheme-Implementation in Scheme gebaut.