LISP имеет функцию setf
для назначения значения переменной. Теперь я задаюсь вопросом о имени функции: часть set
очевидна, но что означает суффикс f
для?
Что означает f в setf?
Ответ 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.