【问题标题】:Why do many lisps have function names like "foo", "foo-1", "foo-2", etc.?为什么许多 lisp 的函数名称有“foo”、“foo-1”、“foo-2”等?
【发布时间】:2011-10-06 03:45:13
【问题描述】:

我注意到各种 Lisp(至少是 Common Lisp 和 Emacs Lisp)中的很多示例,其中两个或多个函数具有相同的名称,但尾随数字除外。例如,Emacs Lisp 有eval-last-sexpeval-last-sexp-1。它还有printprin1。这似乎是一种普遍的做法,但人们学习编程的第一件事就是给函数赋予唯一且描述性的名称。这种做法从何而来?

【问题讨论】:

  • 嗯。我想这已经足够久了,更多描述性函数名称所需的额外字节实际上可能很重要?
  • 当然可以。此外,这种想法比今天更加“狂野西部”。
  • 约定是为辅助函数添加数字后缀。这是在命名空间等出现之前;像 foo-1 这样的函数名称会暗示“foo 是我的主要函数,我之所以存在,是因为实现需要两个函数”。一个原型案例是一个递归函数,其中 foo 是入口点,但真正的工作是由 foo-1 递归完成的。
  • ...我猜这可能也是prin1 的由来,后来证明它本身就很有用。

标签: function lisp naming-conventions elisp


【解决方案1】:

大多数时候这个 1 有语义(通常是“单”):

  • macroexpand 尝试扩展表单中的所有宏,macroexpand-1 仅扩展顶级宏
  • 有一个通用(非标准化)实用程序 last1,它返回列表的最后一个元素(如 last 返回最后一个 cons 单元格)
  • prin1 的情况更复杂,但也不仅仅是随机加 1:还有printprincprin1(还有pprint)。有关详细信息,请参阅Hyperspec

【讨论】:

    猜你喜欢
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    相关资源
    最近更新 更多