2014-05-22 10 views
21

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?

+4

+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').) –

+0

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). –

+4

P sta per "predicate" –

risposta

30

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 argomenti argl ... 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.

+0

Grazie per avermelo fatto notare, ora so a quali termini stare attenti :-)! –

+0

@GoloRoden Ci sono 2 risposte contrastanti, come sai che questo è corretto? – henginy

+0

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'. –