LISP ha la funzione setf
per assegnare un valore a una variabile. Ora mi sono chiesto il nome della funzione: La parte set
è ovvia, ma cosa significa il suffisso f
?Cosa significa la f in setf?
risposta
Il significato effettivo di F è spesso dimenticato. Secondo alcune fonti, suffisso f sopportava Per:
- campo (si veda ad esempio questo answer)
- Form (come visto in vari materiali didattici e manuali)
Tuttavia, secondo Gabriel e Steele's The Evolution of Lisp, SETF proviene da Peter Deutsch's A Lisp Machine with Very Compact Programs (pubblicato nel 1973) e F sta per funzione.
In questo lavoro, Peter Deutsch ha scritto:
La funzione SET è esteso in modo che in modo che se il primo argomento è una lista
(fn argl ... argn)
piuttosto che una variabile, la funzione fn viene chiamata in modalità "store" con argomentiargl ... argn
e newvalue (il secondo argomento di SET). SETQ è anche esteso in modo ovvio, ma non è particolarmente utile. Una funzione più utile è(SETFQ (fn argl ... argn) newvalue)
che cita la funzione e valuta tutto il resto. Ciò consente a RPLACA, ad esempio, di essere definito come(LAMBDA (X Y) (SETFQ (CAR X) Y))
.
(sottolineatura mia)
Gabriel e Steele spiegare come questo è diventato SETF:
Questo nome è stato abbreviato in setf in Lisp-Machine Lisp.
Grazie per avermelo fatto notare, ora so a quali termini stare attenti :-)! –
@GoloRoden Ci sono 2 risposte contrastanti, come sai che questo è corretto? – henginy
Non posso * sapere * che è corretto, ma ho cercato su Google entrambi i termini e ho trovato un altro (piuttosto aggiornato) [answer] (http://stackoverflow.com/a/869693/1333873) che suggerisce che è 'field' , non 'form'. Oltre a ciò, questa risposta è più utile in quanto indica anche cosa significa 'q'. –
- 1. Cosa significa -f in bash
- 2. In F #, cosa significa pipelining?
- 3. In F # cosa significa top-level?
- 4. In F # cosa significa l'operatore >>?
- 5. Cosa significa suffisso "f" nel codice Java?
- 6. Cosa succede quando uso una semplice istruzione setf in LISP?
- 7. Cosa significa = ~ significa in Perl
- 8. Cosa significa! */Significa in .gitignore
- 9. Cosa significa finale in Groovy
- 10. Cosa significa || = significa in Ruby?
- 11. cosa significa "@" significa in C#
- 12. Cosa significa/*! */Significa in C#?
- 13. Cosa significa: :: significa in C++?
- 14. Cosa significa "??" significa in C#?
- 15. F # - cosa combacia ... con | :? X come x significa?
- 16. In Mathematica, che cosa significa @@@?
- 17. Informazioni su "setf" in "defun"?
- 18. javascript: cosa significa/* @ @ */significa?
- 19. Cosa significa Field.Index.NOT_ANALYZED_NO_NORMS significa
- 20. Cosa significa (+ var) significa
- 21. Cosa significa '::' significa?
- 22. Cosa significa "classe:" in C++?
- 23. Cosa significa "That" in Scala
- 24. fputs (_ ("")) cosa significa la sottolineatura?
- 25. Cosa significa/#!/Significa nell'URL?
- 26. In Android, cosa significa la dimensione% p?
- 27. Cosa significa "?" dopo la variabile in C#?
- 28. Cosa significa la "c" in cURL?
- 29. In java -D cosa significa la D?
- 30. Cosa significa la "p" in strptime?
+1 Questa è una domanda interessante. Non è necessariamente una domanda di programmazione, di per sé, (dato che non si tratta di come usare ** setf), ma non è uno con una risposta ovvia, e la comprensione delle convenzioni di denominazione e della storia può spesso aiutare il modello mentale di un programmatore della lingua . (Per inciso, il 'q' in' setq' è più semplice: nei vecchi Lisps in cui l'uso di un simbolo 'valore-simbolo' era più comune, era bello abbreviare '(imposta 'pippo ...)' come '(setq pippo ...) '(quindi q è per' quote').) –
Grazie per questo bel commento :-)). Per me, come principiante del LISP, alcuni nomi sono difficili da comprendere, un altro esempio è 'evenp' e' oddp': mi chiedo solo che cosa significhi 'p', e sicuramente aiuta a memorizzare le funzioni se si capisce veramente il loro nome (e quindi il loro significato). –
P sta per "predicate" –