Ich verstehe den Unterschied zwischen LET und LET * (parallele versus sequentielle Bindung) und theoretisch ist dies durchaus sinnvoll. Aber gibt es einen Fall, in dem Sie LET jemals wirklich gebraucht haben? In all meinem Lisp-Code, den ich mir kürzlich angesehen habe, können Sie jeden LET ohne Änderung durch LET * ersetzen.
Edit: OK, ich verstehe, warum ein Typ LET * erfunden hat, vermutlich als Makro, vor langer Zeit. Meine Frage ist, gibt es angesichts der Tatsache, dass LET * existiert, einen Grund für LET, hier zu bleiben? Haben Sie einen tatsächlichen Lisp-Code geschrieben, bei dem ein LET * nicht so gut funktioniert wie ein einfacher LET?
Ich kaufe das Effizienzargument nicht. Erstens scheint es nicht so schwierig zu sein, Fälle zu erkennen, in denen LET * zu etwas so Effizientem wie LET kompiliert werden kann. Zweitens gibt es viele Dinge in der CL-Spezifikation, die einfach nicht so aussehen, als wären sie überhaupt auf Effizienz ausgelegt. (Wann ist das letzte Mal , wenn Sie eine LOOP mit Typdeklarationen gesehen? Das sind so schwer, herauszufinden , ich habe sie nie benutzt gesehen.) Bevor Dick Gabriels Benchmarks von den späten 1980er Jahren, CL war geradezu langsam.
Es sieht so aus, als wäre dies ein weiterer Fall von Abwärtskompatibilität: Mit Bedacht wollte niemand riskieren, etwas so Grundlegendes wie LET zu brechen. Das war meine Vermutung, aber es ist beruhigend zu hören, dass niemand einen dumm-einfachen Fall hat, den ich vermisst habe, in dem LET ein paar Dinge lächerlich einfacher gemacht hat als LET *.