LISP hat die Funktion setf
, um einer Variablen einen Wert zuzuweisen. Jetzt habe ich mich über den Namen der Funktion gewundert: Der set
Teil ist offensichtlich, aber wofür steht das Suffix f
?Wofür steht das f in setf?
Antwort
Die eigentliche Bedeutung von F wird oft vergessen. Nach einigen Quellen könnte f Suffix steht für:
- Field (siehe zum Beispiel dieser answer)
- Form (wie in verschiedenen Unterrichtsmaterialien und Handbücher gesehen)
Doch nach Gabriel und Steele's The Evolution of Lisp, SETF kommt von Peter Deutsch's A Lisp Machine with Very Compact Programs (veröffentlicht in 1973) und F steht für Funktion.
In diesem Papier, Peter Deutsch schrieb:
Die SET-Funktion erweitert, so dass so, dass, wenn das erste Argument eine Liste ist
(fn argl ... argn)
eher als eine Variable, die Funktion fn in „Speichern“ -Modus genannt wird mit Argumentenargl ... argn
und newvalue (das zweite Argument von SET). SETQ wird auch in naheliegender Weise erweitert, ist aber nicht besonders nützlich. Eine nützlichere Funktion ist(SETFQ (fn argl ... argn) newvalue)
welche die Funktion zitiert und alles andere bewertet. So kann RPLACA beispielsweise als(LAMBDA (X Y) (SETFQ (CAR X) Y))
definiert werden.
(Hervorhebung von mir)
Gabriel und Steele erklären, wie diese SETF wurde:
Dieser Name abgekürzt wurde in Lisp-Maschine Lisp setf.
Danke, dass du darauf hingewiesen hast, jetzt weiß ich, auf welche Begriffe ich achten muss :-)! –
@GoloRoden Es gibt zwei widersprüchliche Antworten, woher weißt du, dass dieser richtig ist? – henginy
Ich kann nicht * wissen *, dass es korrekt ist, aber ich googelte für beide Begriffe und fand einen anderen (ziemlich upvoted) [Antwort] (http://Stackoverflow.com/a/869693/1333873), die darauf hindeuten, dass es 'Feld' ist , nicht 'Form'. Abgesehen davon ist diese Antwort hilfreicher, da sie auch darauf hinweist, wofür das 'q' steht. –
- 1. Wofür steht das Gerät?
- 2. Wofür steht das Akronym "Spitter"?
- 3. Wofür steht das() in der Eigenschaftendefinition?
- 4. Wofür steht das "h" in oplog.rs?
- 5. Wofür steht das "yy" in lex.yy.c?
- 6. In Java -D wofür steht das D?
- 7. Wofür steht das "ONET" in ONET.xml?
- 8. Wofür steht das "p" in strptime?
- 9. Wofür steht das "c" in cURL?
- 10. Wofür steht das `dir` in` console.dir`?
- 11. Wofür steht das "m" in Java Code
- 12. Wofür steht das A in ~ A Format?
- 13. Wofür steht Bump Version?
- 14. wofür steht schluck- "cli"?
- 15. Wofür steht mscorlib?
- 16. Wofür steht `rspec/autorun`?
- 17. eabihf Wofür steht hf?
- 18. Wofür steht ** uevent **?
- 19. Wofür steht "Acme" in Symfony2?
- 20. Wofür steht ic_launcher?
- 21. Wofür steht FOO?
- 22. Wofür steht *** NO_CI ***?
- 23. Wofür steht "Boh" in WordPress?
- 24. Wofür steht LUA?
- 25. Wofür steht TDD?
- 26. Wofür steht "Leichtigkeit"?
- 27. Wofür steht SKU?
- 28. Wofür steht PSR-0?
- 29. Wofür steht MVW?
- 30. Wofür steht "net" in Verilog?
+1 Dies ist eine interessante Frage. Es ist nicht unbedingt eine Programmierfrage per se (da es nicht darum geht, ** setf zu benutzen), aber es ist keine mit einer offensichtlichen Antwort, und das Verständnis der Namenskonventionen und der Geschichte kann oft dem mentalen Modell eines Programmierers der Sprache helfen . (Übrigens, das 'q' in' setq' ist einfacher. In älteren Lisps, wo die Verwendung des Symbolwerts eines Symbols häufiger war, war es schön, '' (set 'foo ...) 'als' (setq foo ...) zu kürzen. '(so das q ist für' zitat').) –
Danke für diesen netten Kommentar :-)). Für mich als LISP-Anfänger sind einige Namen schwer zu verstehen, ein anderes Beispiel ist "evenp" und "oddp": Ich frage mich nur, wofür das 'p' steht, und es hilft definitiv, Funktionen zu merken, wenn man ihre Namen wirklich versteht ihre Bedeutung). –
P steht für "Prädikat" –