【问题标题】:What does the f in setf stand for?setf 中的 f 代表什么?
【发布时间】:2014-07-11 13:42:52
【问题描述】:

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

【问题讨论】:

  • +1 这是一个有趣的问题。这本身不一定是一个编程问题(因为它不是关于如何使用 setf),但它不是一个有明显答案的问题,理解命名约定和历史通常可以帮助程序员的心智模型的语言。 (顺便说一下,setq 中的 q 更容易。在旧的 Lisps 中,使用符号的 symbol-value 更为常见,最好将 (set 'foo …) 缩写为 (setq foo …)(所以 q 代表 quote) .)
  • 感谢您的精彩评论 :-))。对于我作为 LISP 初学者来说,有些名字很难掌握,另一个例子是 evenpoddp:我只是想知道 p 代表什么,如果你真的理解它们的名字,它肯定有助于记住函数(因此他们的意思)。
  • P 代表“谓词”
  • 您可能对cliki.net/Naming+conventions 感兴趣,但请注意它有“f in setf 的广义字段”
  • 再次感谢您指出这一点 :-)

标签: lisp common-lisp


【解决方案1】:

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

  • 字段(例如参见 answer
  • 表格(见于各种教材和手册)

不过,根据 Gabriel 和 Steele 的 The Evolution of Lisp,SETF 来自 Peter Deutsch 的 A Lisp Machine with Very Compact Programs(1973 年出版),而 F 代表 function

在这篇论文中,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-Machine Lisp 中缩写为 SETF。

【讨论】:

  • 感谢您指出这一点,现在我知道要注意哪些术语了:-)!
  • @GoloRoden 有两个相互矛盾的答案,你怎么知道这个是正确的?
  • 我无法知道这是正确的,但我用谷歌搜索了这两个术语并找到了另一个(相当赞成)answer,这表明它是field,而不是@ 987654330@。除此之外,这个答案更有帮助,因为它还指出了 q 代表什么。
  • 感谢分享链接。现在看到这个问题的其他人也可以知道如何。
  • 我使用有信誉的来源更正了答案。 F 代表函数,而不是表单或字段。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-12
  • 1970-01-01
  • 2015-03-13
相关资源
最近更新 更多