Lisp setf中的f代表什么?

Lisp setf中的f代表什么?,lisp,common-lisp,Lisp,Common Lisp,LISP有setf函数为变量赋值。现在我一直在想函数的名称:set部分很明显,但是f后缀代表什么?f的实际含义常常被遗忘。根据一些来源,f后缀可以代表: 字段(参见此示例) 形式(见各种教材和手册) 然而,根据Gabriel和Steele的说法,SETF来自Peter Deutsch的(1973年出版),F代表函数 Peter Deutsch在本文中写道: SET函数被扩展,因此如果第一个参数是一个列表(fn argl…argn)而不是一个变量,那么函数fn将在带有参数argl…的“存储”模

LISP有
setf
函数为变量赋值。现在我一直在想函数的名称:
set
部分很明显,但是
f
后缀代表什么?

f的实际含义常常被遗忘。根据一些来源,f后缀可以代表:

  • 字段(参见此示例)
  • 形式(见各种教材和手册)
然而,根据Gabriel和Steele的说法,SETF来自Peter Deutsch的(1973年出版),F代表函数

Peter Deutsch在本文中写道:

SET函数被扩展,因此如果第一个参数是一个列表
(fn argl…argn)
而不是一个变量,那么函数fn将在带有参数
argl…的“存储”模式下调用。。。argn
和newvalue(SET的第二个参数)。SETQ也以明显的方式进行了扩展,但并不特别有用。一个更有用的函数是
(SETFQ(fn argl…argn)newvalue)
,它引用函数的名称并计算其他所有内容。例如,这允许将RPLACA定义为
(LAMBDA(X Y)(SETFQ(CAR X)Y))

(强调矿山)

Gabriel和Steele解释了这是如何成为SETF的:

该名称在Lisp机器Lisp中缩写为SETF


谢谢你指出这一点,现在我知道该注意哪些术语了:-)@GoloRoden有两个相互矛盾的答案,你怎么知道这一个是正确的?我不知道它是否正确,但我在谷歌上搜索了这两个术语,发现另一个(相当高的票数)表明它是
字段
,而不是
表单
。除此之外,这个答案更有帮助,因为它还指出了
q
代表什么。感谢分享链接。现在,其他看这个问题的人也知道怎么做了。我用可靠的消息来源更正了答案。F代表函数,而不是形式或字段。+1这是一个有趣的问题。这本身不一定是一个编程问题(因为它不是关于如何使用setf),但它不是一个有明确答案的问题,理解命名约定和历史通常可以帮助程序员建立语言的心理模型。(顺便说一句,
setq
中的
q
更容易。在使用符号的
symbol值
更常见的旧Lisp中,缩写
(将'foo…
设置为
(setq foo…
(因此q代表
quote
)很好。感谢您的好意:-))。对于我这个LISP初学者来说,有些名称很难掌握,另一个例子是
evenp
oddp
:我只是想知道
p
代表什么,如果你真的理解函数的名称(以及它们的含义),它肯定有助于记忆函数。p代表你可能感兴趣的“谓词”,但请注意,它又得到了“setf中f的广义场”,非常感谢您指出这一点:-)