Lisp Stil: Setq vs Setf
Peter Norvig erwähnt in Paradigmen der Künstlichen Intelligenz Programmierungauf Seite 50den trade-off zwischen Genauigkeit und Konsistenz und, wenn die Wahl des mittels setq oder setf zur Aktualisierung einer variable einen Wert. Was empfehlen Sie? Haben Sie jemals in einer situation, wo es darauf ankam, viel über Lesbarkeit?
InformationsquelleAutor der Frage Brendan Foote | 2009-06-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwendung von setq mehr low-level, aber die Leistung von setf ist nicht ein problem. Und setf können Sie (oder die Bibliothek, Autoren) zusammen, um kundenspezifische setf Verhalten, wie z.B. das teilen von benutzerdefinierten Datenstrukturen. Ich sage: gehen Sie mit setf überall, es sei denn, Sie haben einen Grund, nicht zu.
Siehe auch Praktische Common Lisp, Kapitel 3: "Der SETF-makro ist Common Lisp die wichtigste Zuweisungsoperator." PCL ist kostenlos verfügbar online: http://gigamonkeys.com/book/
InformationsquelleAutor der Antwort Harold L
FWIW, verwende ich immer
setf
. Wenn ich die Struktur meines Codes etwas, ich muss nur ändern Sie den "Ort" statt findet und der Betreiber (setq -> setf).Auch, Mach dir keine sorgen über die Leistung, setf ist genau das gleiche wie setq für Symbole:
InformationsquelleAutor der Antwort jrockway
Können Sie
setf
wo könnten Siesetq
. In der Tatsetf
ist tatsächlich ein makro, das baut aufsetq
. So, dies sollte rein der Lesbarkeit und Stil Thema.Fast alle der code, den ich gesehen habe und vermeidet den Einsatz von
setq
und verwendetsetf
.InformationsquelleAutor der Antwort Ville Laurikari
setf "set-Feld", es verändert einen Ort und kann Benutzer-Erweiterungen.
setq ist mit zitieren erste argument.
InformationsquelleAutor der Antwort Anton Kazennikov
Empfehle ich Ihnen, Folgen Sie Norvig die abschließende Beratung in diesem Bereich: konsistent sein. 'Lesbarkeit' ist natürlich der wichtigste Grund, um eine Wahl bei der Programmierung. Wenn es wichtig ist, zu kommunizieren, um den Leser (vielleicht in 2 Monaten), dass Sie es mit die gesamte Zelle "Wert" für ein symbol, dann verwenden Sie
setq
; andernfalls verwenden Siesetf
. Aber nur, wenn du konsequent.InformationsquelleAutor der Antwort user78171
Werden Sie nicht, wenn Sie falsch verwendet setf überall statt setq.
Es sind die Dinge wie diese, zieht Common Lisp von vorne Los, viel unbenutztes Zeug, dass implementors noch unterstützen müssen.
InformationsquelleAutor der Antwort Marko