【问题标题】:Null value in Mit-Scheme?Mit-Scheme中的空值?
【发布时间】:2012-02-02 16:11:04
【问题描述】:

谁能告诉我 mit-scheme 中的空值表示是什么?在 SICP 书中,它应该是“nil”,但它不起作用。 谢谢。

【问题讨论】:

    标签: scheme sicp mit-scheme


    【解决方案1】:

    '() 应该可以工作。基本上,scheme 中的 nil 是空列表,所以引用一个空列表会给你 nil。

    【讨论】:

    • 是的。谢谢。有用。我用 (cons 2 (cons 3 (cons 4 ()))) 测试得到 (2 3 4)。
    • 天啊,这个答案让我免于烦恼。我只能从任何 Scheme 文档中收集到 ()'nil ,显然它们都不能用来表示一个空列表。并且 SICP 直到中途才引入报价可能无济于事......谢谢!
    【解决方案2】:

    有历史。 访问http://web.archive.org/web/20070808004043/http://wiki.wordaligned.org/sicp/published/FrequentlyAskedQuestions

    原始(损坏):http://wiki.wordaligned.org/sicp/published/FrequentlyAskedQuestions


    上述常见问题解答中的文字(以防 Internet 存档损坏):

    为什么“nil”不起作用?

    快速回答是:nil 不再是 Scheme 的一部分,请改用 '()。长答案如下……

    第 2 章中的早期示例使用 nil 作为列表终止符,但是当这些示例使用(例如)MIT 方案运行时,您会得到:

    ;Unbound variable: nil
    

    同样,使用()null 代替nil 可能适用于某些实现,但两者都不是可移植的。向导书在此脚注中解决了这个问题

    令人惊讶的是,Lisp 方言标准化中的多少精力都消散在了几乎毫无意义的争论中:nil 应该是一个普通的名字吗? nil 的值应该是一个符号吗?它应该是一个列表吗?应该是一对吗?在 Scheme 中,nil 是一个普通名称,我们在本节中将其用作一个变量,其值为列表结束标记(就像 true 是一个具有真值的普通变量一样)。 Lisp 的其他方言,包括 Common Lisp,将 nil 视为特殊符号。这本书的作者们经历了太多的语言标准化争吵,他们希望避免整个问题。一旦我们在 2.3 节中引入了引号,我们将把空列表表示为'(),并完全省略变量 nil。

    自从写了这篇文章以来,nil 已经从 Scheme 标准中删除了——但底线是:使用‘(),而不是 nil。 Mike 在发给 accu-sicp 列表的电子邮件中指出:

    这是一个麻烦的事情,这个 nil/null/'() 业务。方案 48 和 scm 不定义 null,而 guile 将其定义为类似于 common lisp 的 null (与它的 nil 一起使用,其行为类似于 cl 的 nil, 它本身与 '() 不同——也许这有关系 fsf 计划在 guile 中重新做 emacs)。我认为最好的选择是 将作者对 nil 的使用替换为 ‘()。

    [复制时只进行了一点排版清理,以便更好地将 Markdown 和通常的 ASCII 输入匹配到相关语言/实现中。]

    【讨论】:

      【解决方案3】:

      我使用MIT/GNU Scheme microcode 15.3()'() 都可以。 (正如你所说,nilnull 不起作用)。

      1 ]=> ()
      
      ;Value: ()
      
      1 ]=> '()
      
      ;Value: ()
      
      1 ]=> (cons 1 ())
      
      ;Value 2: (1)
      
      1 ]=> (cons 1 '())
      
      ;Value 3: (1)
      

      【讨论】:

        【解决方案4】:

        (list) '() 和 () 可以表示 null。例如,

        (define (transpose mat) (accumulate-n cons () mat))
        

        或将 () 替换为 '() 或 (list )。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多