【问题标题】:Cons in scheme explanation方案解释中的缺点
【发布时间】:2015-02-09 02:16:19
【问题描述】:

(cons 1 2) 给我们(1 . 2)

(cons 3 4) 给我们(3 . 4)

那么为什么(cons (cons 1 2) (cons 3 4)) 给我们((1 . 2) 3 . 4)? 为什么不是((1 . 2) (3 . 4))

【问题讨论】:

    标签: scheme cons


    【解决方案1】:

    好吧,它不会是((1 . 2) (3 . 4)),因为那将是一个包含两个元素的列表,每个元素都是一个缺点对。我猜你的意思是什么:为什么不是((1 . 2) . (3 . 4))

    嗯,其实下面两个表达式是等价的:

    '((1 . 2) . (3 . 4))
    '((1 . 2) 3 . 4)
    

    这与 Scheme 的点分符号如何与其对正确列表的表示一起工作有关。请记住:

    '(1 . (2 . (3 . (4 . ()))))
    

    ...将简单地打印为:

    (1 2 3 4)
    

    但是,这个:

    '(1 . (2 . (3 . 4)))
    

    ...会这样打印:

    (1 2 3 . 4)
    

    请注意,Scheme 尽可能使用简化的列表表示法——它只有在到达没有配对或空列表作为其cdr 元素的配对时才回退到显式点点事物。

    因此,在您的原始示例中,该 cons 对的第二个元素 对,因此 Scheme 使用列表表示法。这样它就可以去掉第二组括号和多余的点,产生你遇到的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多