lisp + python = lisPy

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Costi
User
Beiträge: 545
Registriert: Donnerstag 17. August 2006, 14:21

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?
cp != mv
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

Hallo,

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

LG

rolgal_reloaded
Benutzeravatar
mq
User
Beiträge: 124
Registriert: Samstag 1. Januar 2005, 19:14

Und was fuer einen Lisp-Dialekt willst du da schlussendlich implementieren? Irgendwie ist es sinnfrei, noch einen zu erfinden, den eh keiner benutzen wird...
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

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!
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

veers hat geschrieben:Zum Spass an der Freude würde ich mal sagen ;)
Ist ja auch ein gutes Motiv.
Benutzeravatar
mq
User
Beiträge: 124
Registriert: Samstag 1. Januar 2005, 19:14

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
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

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.
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

@BlackVivi

Deine Signatur ist indiskutabel!
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

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.
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?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

rolgal_reloaded hat geschrieben:@BlackVivi
Deine Signatur ist indiskutabel!
@BlackVivi: Ändere deine Signatur.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

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.
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

gerold hat geschrieben:
rolgal_reloaded hat geschrieben:@BlackVivi
Deine Signatur ist indiskutabel!
@BlackVivi: Ändere deine Signatur.
Lol?
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

@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?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Costi
User
Beiträge: 545
Registriert: Donnerstag 17. August 2006, 14:21

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)
cp != mv
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))
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten