2011-01-03 5 views
11

Mögliche Duplizieren:
How many primitives does it take to build a LISP machine? Ten, seven or five?Der minimalste LISP?

ich neugierig bin. Was ist der minimalste LISP, auf dem alle weiteren Features aufgebaut werden könnten? Effizienz ignorieren - die Frage kommt einfach von einem Ort der Eleganz.

Wenn du auf einem fremden Planeten aufgewacht bist und angewiesen wurdest, den minimalsten LISP zu erstellen, auf dem du später aufbauen könntest, um jedes Feature zu implementieren, das du magst, was würdest du miteinbeziehen?

Bearbeiten: Klarstellung. Meine Absicht hier ist nicht, eine Debatte zu beginnen, sondern ich überlege, ein minimales LISP zu implementieren und ich möchte verstehen, wie minimal ich gehen kann, während ich die Sprache, die ich implementiere, immer noch komplett verinnerlicht habe Ich bin sicher, dass ich lernen werde, was ich von der Kontroverse lernen wollte. :). Vielen Dank!

+0

Wie ist das subjektiv? Es könnte ein Duplikat sein (ich glaube, ich habe einmal eine ähnliche Frage gesehen, werde jetzt suchen). – delnan

+1

Es gefunden: [Wie viele Primitive braucht es, um eine LISP-Maschine zu bauen? Zehn, sieben oder fünf?] (Http://stackoverflow.com/questions/3482389/how-many-primitives-does-it-take-to-build-a-lisp-machine-en-seven-for-five) (Hat auch einen Link zu einer anderen Frage, die auch dieses Thema berührt). – delnan

+0

Möchten Sie, dass die minimale Anzahl von Operationen für die Sprache abgeschlossen wird oder alle Sprachmerkmale definiert werden können, z. gemeinsam Lispeln? – sepp2k

Antwort

4

Peter Norvig implementierte einen LISP-Interpreter in 90 Zeilen von Python, und sein nachfolgender Artikel diskutiert detailliert, was Sie fragen. Es lohnt sich das Lesen, IMHO.

http://norvig.com/lispy.html

Ich habe das Gefühl, dass seine „Sequenzierung“ Sonderform, wenn nur die Funktion fallen gelassen werden könnte Anrufe mit einer beliebigen Anzahl von Parametern übernehmen könnte.

(defun last (lst) 
    (if (cdr lst) 
     (last (cdr lst)) 
     (car lst))) 

(defun begin (:rest y) (last y)) 

Aber dies würde Funktionsanwendung komplizieren.