LISP具有setf
函数来为变量赋值。现在我一直想知道函数的名称:set
部分是显而易见的,但f
后缀代表什么?
答案 0 :(得分:33)
F的实际含义经常被遗忘。根据一些消息来源,f后缀可能代表:
然而,根据Gabriel和Steele的The Evolution of Lisp,SETF来自Peter Deutsch的{{3}}(1973年出版),F代表功能
在本文中,Peter Deutsch写道:
SET函数被扩展,以便如果第一个参数是列表
(fn argl ... argn)
而不是变量,则函数fn在" store"中被调用。带参数argl ... argn
和newvalue(SET的第二个参数)的模式。 SETQ也以显而易见的方式扩展,但并不是特别有用。一个更有用的功能是(SETFQ (fn argl ... argn) newvalue)
,其中引用 函数名称并评估其他所有内容。例如,这允许将RPLACA定义为(LAMBDA (X Y) (SETFQ (CAR X) Y))
。
(强调我的)
Gabriel和Steele解释了这是如何成为SETF的:
此名称在Lisp-Machine Lisp中缩写为SETF。