喜欢 first 和 rest 而不是 car 和 cdr 的 lisp 如何接近像 cdaddr 这样的组合?
How do lisps that prefer first and rest to car and cdr approach combinations like cdaddr?
Lisp 社区中的一个重大分歧是我们是否应该有 car
和 cdr
或 first
和 rest
。传统的 car
和 cdr
的好处之一是我们可以将它们组合起来产生像 cdaddr
这样可发音的函数。不使用 car
和 cdr
的 Lisp 如何通常与 first
和 rest
形成这样的组合?有共识吗?
Clojure,无论如何,根本不需要 caddaadr 和朋友,因为没有人只用 cons 单元构建数据结构。该语言确实有 first
和 next
中任意两个的组合,命名为 ffirst
、fnext
、nnext
和 nfirst
,它们已添加我想很早的时候因为假设我们想要像 cadr 这样的东西,但我从来没有看到它们在现实生活中使用过。相反,经常使用解构。
在极少数情况下,您需要深入研究由嵌套序列构建的结构,解构通常仍会生成可读代码,而且手写代码也不是什么大负担。这也是对您的一个很好的提示,也许您应该对事物进行更多抽象,而不是直接使用这么多层的原始组合器。
Lisp 社区中的一个重大分歧是我们是否应该有 car
和 cdr
或 first
和 rest
。传统的 car
和 cdr
的好处之一是我们可以将它们组合起来产生像 cdaddr
这样可发音的函数。不使用 car
和 cdr
的 Lisp 如何通常与 first
和 rest
形成这样的组合?有共识吗?
Clojure,无论如何,根本不需要 caddaadr 和朋友,因为没有人只用 cons 单元构建数据结构。该语言确实有 first
和 next
中任意两个的组合,命名为 ffirst
、fnext
、nnext
和 nfirst
,它们已添加我想很早的时候因为假设我们想要像 cadr 这样的东西,但我从来没有看到它们在现实生活中使用过。相反,经常使用解构。
在极少数情况下,您需要深入研究由嵌套序列构建的结构,解构通常仍会生成可读代码,而且手写代码也不是什么大负担。这也是对您的一个很好的提示,也许您应该对事物进行更多抽象,而不是直接使用这么多层的原始组合器。