比起像 cdaddr 这样的 car 和 cdr 的组合,那些更喜欢先休息的 lisps 如何?

J. *_*ini 2 lisp list clojure cons cdr

Lisp 社区中最大的分歧之一是我们是否应该拥有carandcdrfirstand rest。一个传统的优势carcdr是我们可以结合他们产生像pronoucible功能cdaddr。不使用carand 的Lisps cdr,例如 Clojure,通常如何与firstand形成这样的组合rest?有没有共识?

ama*_*loy 8

无论如何,Clojure 根本不需要 caddaadr 和朋友,因为没有人仅仅从 cons 单元构建数据结构。语言确实有任意两个的组合firstnext命名ffirstfnextnnext,和nfirst,这是很早就加入上我想是因为它假定我们想要的东西像CADR,但我从来没有看到他们在现实生活中使用。相反,解构被经常使用。

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

  • 解构也有助于深入了解事物。 (2认同)
  • @cfrick 好点。我建议将其添加为答案,或将其编辑到我的答案中。 (2认同)