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 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" –