2

Lisp 社区中最大的分歧之一是我们是否应该拥有carandcdrfirstand restcar传统和的好处之一cdr是我们可以将它们结合起来产生可发音的功能,例如cdaddr. 不使用carand的 Lisps cdr,例如 Clojure,通常如何与firstand形成这样的组合rest?有没有共识?

4

1 回答 1

8

无论如何,Clojure 根本不需要 caddaadr 和朋友,因为没有人仅仅从 cons 单元构建数据结构。该语言确实具有firstand next、命名ffirstfnextnnext和中的任意两个组合,nfirst我想这些是很早就添加的,因为假设我们想要像 cadr 这样的东西,但我从未在现实生活中看到它们使用过。相反,经常使用解构。

在极少数情况下,您需要深入了解由嵌套序列构建的结构,解构通常仍会产生可读的代码,但将其写出来也不是什么大负担。这也是对您的一个很好的提示,也许您应该更多地抽象事物,而不是直接使用如此多的原始组合器层。

于 2021-01-30T15:08:11.383 回答