【发布时间】:2021-04-23 04:00:15
【问题描述】:
我记得在Clojure for Lisp Programmers videos 中重复的一个说法是,早期 Lisps,尤其是 Common Lisp 的一个很大的弱点,就是过多地与 Lisps 的列表结构结合,尤其是 cons 单元格。您可以在链接视频的第 25 分钟处找到一次这种说法,但我确信我记得在该系列的其他地方听到过这种说法。重要的是,在视频的同一点,我们看到了这张幻灯片,向我们展示了 Clojure 有许多其他的数据结构,而不仅仅是老式的 Lispy 列表:
这让我很困扰。我对 Lisp 的了解非常有限,但我一直被告知,其传奇的元可编程性的一个关键要素是一切——是的,一切——都是一个列表,而 this is what prevents the sort of errors that we get when trying to metaprogram other languages。这是否表明通过添加新的一流数据结构,Clojure 降低了其同质性,从而使其元编程比其他 Lisp 更困难,例如 Common Lisp?
【问题讨论】:
-
这是基于意见的问题的典型示例。它应该这样关闭:这是一个很好的问题,但它不适合 SO。
-
@tfb 你不相信同音性是一个可测量的量吗?
-
同音性是一个位:一种语言的源代码可以作为该语言的(预定义)数据结构处理,或者不能。其他一切都是意见。
-
Clojure 与 Lisp 相差甚远;它是一种用于操作不可变、持久序列的领域特定语言,其灵感来自 Lisp 语法及其元编程概念的大幅修改概念。
-
元编程的唯一要求始终是能够在编译时构造 AST。 AST 可以是任何东西,不一定是一堆 cons 细胞。例如,方案“语法对象”根本不是列表。您可以将它们转换为列表并返回,但这不是一个好主意,因为您会丢失位置元数据。
标签: clojure lisp common-lisp metaprogramming homoiconicity