Что означает f в setf?

LISP имеет функцию setf для назначения значения переменной. Теперь я задаюсь вопросом о имени функции: часть set очевидна, но что означает суффикс f для?

Ответ 1

Фактическое значение F часто забывается. Согласно некоторым источникам, суффикс f может означать:

  • Поле (см., например, этот ответ)
  • Форма (как видно из различных учебных материалов и руководств)

Однако, согласно Габриэлю и Стилу Эволюция Lisp, SETF происходит от Peter Deutsch A Lisp Машина с очень компактными программами (опубликовано в 1973), а F обозначает функцию.

В этой статье Питер Дойч писал:

Функция SET расширяется так, что если первый аргумент представляет собой список (fn argl ... argn), а не переменную, функция fn вызывается в режиме "store" с аргументами argl ... argn и newvalue (второй аргумент SET). SETQ также распространен очевидным образом, но не особенно полезен. Более полезной функцией является (SETFQ (fn argl ... argn) newvalue), которая цитирует имя функции и оценивает все остальное. Это позволяет RPLACA, например, быть определена как (LAMBDA (X Y) (SETFQ (CAR X) Y)).

(акцент мой)

Габриэль и Стил объясняют, как это стало SETF:

Это имя было сокращено до SETF в Lisp -Machine Lisp.