【问题标题】:What is the difference between Lisp-1 and Lisp-2?Lisp-1 和 Lisp-2 有什么区别?
【发布时间】:2011-06-02 11:45:35
【问题描述】:

我试图了解 Lisp-1 和 Lisp-2 之间的区别以及这与 Clojure 的关系,但我仍然无法正确理解。谁能赐教?

【问题讨论】:

    标签: clojure lisp lisp-2


    【解决方案1】:

    您可能想阅读 Richard Gabriel 撰写的 paper。它是 Lisp 社区在 Lisp1 与 Lisp2 中讨论的问题的总结。前几节内容有点密集且缓慢,但当你读完第 5 节时,它会更容易阅读。

    基本上,Lisp1 有一个将符号映射到值的单一环境,这些值可以是“常规”或函数。 Lisp2 有(至少)两个命名空间(符号有一个用于函数值的槽和一个用于常规值的槽)。因此,在 Lisp2 中,您可以拥有一个名为 foo 的函数和一个名为 foo 的值,而在 Lisp1 中,名称 foo 只能引用单个值(函数或其他)。

    两者之间存在一些权衡和口味差异,但请阅读论文了解详细信息。 Christian Queinnec 的书“Lisp in Small Pieces”也讨论了贯穿文本的差异。

    【讨论】:

    • Gabriel 论文中比较神秘的部分之一是关于多处理的第 11 部分。在该部分中,他暗示 Lisp1 更有利于函数式编程风格,因此更有利于多处理。显然,这对 Clojure 很感兴趣。但我不太确定为什么 Lisp1 更有利于FP。有人对此有深入了解吗?
    • 可能是因为 FP 的主要观点是将函数视为一等值,因此将它们与所有其他值一样处理会更加方便和概念上更清晰
    • @PeterMcLain 当 Lisp-1 方言的用户说 Lisp-1 更有利于函数式编程时,他们的意思是你不必在代码中塞满funcall 和 @ 987654324@ 运营商。这些在 Lisp-1 中消失了。
    • Schemer 尝试编写 Lisp 时发生的示例:emacs.stackexchange.com/q/28979/2787
    • 我只是喜欢这篇论文使用“明显”一词,具有“更容易理解”的讽刺意味。
    【解决方案2】:

    根据wikipedia

    单独的函数命名空间是否是一个优势是 Lisp 社区中争论的根源。它通常被称为 Lisp-1 与 Lisp-2 的辩论。 Lisp-1 指的是 Scheme 的模型,Lisp-2 指的是 Common Lisp 的模型。

    这基本上是关于变量和函数是否可以具有相同的名称而不会发生冲突。 Clojure is a Lisp-1 表示它不允许函数和变量同时使用相同的名称。

    【讨论】:

    • Lisp-2 中的函数和变量同名难道不是更令人困惑吗?
    • 部分原因是使用 Lisp-2 方言的程序员不会竭尽全力让函数和变量具有相同的名称。 list 经常被用作函数参数而不是任何东西,天哪,因为(list ...) 是一个标准函数,所以这太令人困惑了。许多将list 作为变量的函数不使用list 函数,或者不在该变量附近使用它。即使发生这种情况也不算太糟:(list foo list)。这并不比像“打好仗”这样的句子更令人困惑,其中同一个词作为名词和动词出现。
    • @Zubair Java 有更多的命名空间。可以定义同名的类、方法和变量。
    • 作为助记符,我认为 Lisp 1 有 1 个命名空间,而 Lisp 2 有 2 个命名空间(一个用于函数,一个用于变量)。
    • @NickMcCurdy 作为助记符,我认为自行车有两个轮子,三轮车有三个。
    猜你喜欢
    • 2011-02-27
    • 1970-01-01
    • 2011-04-23
    • 2019-09-10
    • 2016-02-18
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多