LET gegen LET * in Common Lisp

Verstehe ich den Unterschied zwischen LET und LET* (parallele versus sequentielle Bindung), und als eine theoretische Angelegenheit, es macht absolut Sinn. Aber gibt es einen Fall, wo Sie jemals tatsächlich benötigt LASSEN? In allen meinen Lisp-code, ich habe vor kurzem, könnten Sie ersetzen Sie alle LASSEN mit LET* - keine Veränderung.

Edit: OK, ich verstehe warum einige Kerl erfunden LASSEN*, die vermutlich ein makro, Weg zurück, wenn. Meine Frage ist, da LASS* vorhanden ist, gibt es einen Grund für LASSEN zu bleiben? Haben Sie geschrieben, die tatsächliche Lisp-code, wo ein LET* würden nicht so gut funktionieren wie ein normaler LASSEN?

Ich nicht kaufen, das Effizienz-argument. Erste, erkennen von Fällen, in denen LET* kompiliert werden kann, in etwas so effizient wie LASSEN scheint einfach nicht so schwer. Zweitens, es gibt viele Dinge, die in der CL-spec, die einfach nicht scheinen, wie Sie wurden entwickelt, um die Effizienz bei allen. (Wann ist das Letzte mal sah Sie eine SCHLEIFE mit Typ-Deklarationen? Diese sind so hart, um herauszufinden, ive nie gesehen Sie verwendet werden.) Bevor Dick Gabriels Eckpunkte der späten 1980-s, CL war geradezu langsam.

Sieht es aus wie dies ist ein weiterer Fall von rückwärts-Kompatibilität: mit bedacht, niemand wollte das Risiko gegen so etwas Grundsätzliches wie LASSEN. Das war meine Vermutung, aber es ist tröstlich zu hören, dass niemand eine dumm-einfache Fall, den ich fehlte, wo LASSEN Sie einen Haufen Dinge, die lächerlich einfacher als LET*.

InformationsquelleAutor der Frage Ken | 2009-02-16

Schreibe einen Kommentar