为什么许多 Lisp 都有诸如“foo”、“foo-1”、“foo-2”等函数名称?

发布于 2024-12-08 13:24:59 字数 252 浏览 0 评论 0原文

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

I've noticed quite a few examples in various Lisps (at least Common Lisp and Emacs Lisp) where two or more functions had identical names except for a trailing number. For example, Emacs Lisp has eval-last-sexp and eval-last-sexp-1. It also has print and prin1. This seems to be a general practice, yet one of the first things one learns about programming is to give functions unique and descriptive names. Where does this practice come from?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

黄昏下泛黄的笔记 2024-12-15 13:24:59

大多数情况下,这个 1 具有语义含义(通常是“单个”):

  • macroexpand 试图展开表单中的所有宏,而 macroexpand-1 则展开只有顶级宏
  • 有一个通用的(未标准化)实用程序 last1,它返回列表的最后一个元素(因为 last 返回最后一个 cons 单元格
  • prin1 更复杂,但也不仅仅是随机加 1:有 printprincprin1 code> (还有 pprint)。有关更多详细信息,请参阅 Hyperspec

Most of the times this 1 has a semantic meaning (usually, "single"):

  • there's macroexpand that tries to expands all macros in a form, and macroexpand-1 that expands only the top-level macro
  • there's a common (not standardized) utility last1, that returns the last element of a list (as last returns the last cons cell)
  • the case for prin1 is more complicated, but as well isn't just a random addition of 1: there's print, princ and prin1 (and also pprint). See Hyperspec for more details.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文