2009-08-10 5 views

Antwort

0

Ich glaube nicht, dass es. Ich denke, defsetf können Sie Dinge in Lisp wie (setf (car x) 5) tun, d. H. Verwenden, was scheint, das Ergebnis einer Funktion als ein l-Wert zu sein. In Schema müssen sie jedoch separate Mutationsfunktionen wie set-car! und set-cdr! definieren, um die gleiche Aufgabe zu erfüllen; Das obige Beispiel wäre (set-car! x 5).

+0

Sie benötigen diese Funktionen auch in CL (zum Beispiel 'rplaca') -' setf' ist nur Syntax, die auf sie erweitert wird. –

2

Ich bin mir ziemlich sicher, dass es kein Äquivalent im Standard (RnRS) -Schema gibt, aber SRFI 17, das von einigen Scheme-Implementierungen unterstützt wird, erlaubt Ihnen, Setter für verallgemeinerte Orte zu definieren.

+2

Beachten Sie, dass srfi-17 den Laufzeitwert des Accessors und nicht das Formular selbst verwendet. Es ist ein kleiner Unterschied, aber es kann wichtig sein (normalerweise bedeutet es, dass es ein bisschen langsamer und ein bisschen flexibler ist). –