Lisp :( A(B C)),为什么1个列表和1个原子?

时间:2013-05-28 21:16:59

标签: list syntax lisp parentheses

我正在学习 Lisp ,我不理解他们在解释列表原子的课程中给出的一些例子。

我理解:

  • (A B):1个列表,2个原子
  • (A B C):1个列表,3个原子

我不明白这一部分:

  • (A(B C)):1个列表,1个原子

经过深思熟虑之后,我认为:

  • A是原子,(B C)是列表,但我真的不明白为什么......

    • 为什么第一个和最后一个括号不被视为一个列表?
    • 为什么我们不把B和C算作原子?

提前感谢对这个奇怪的事情的任何启示:)

5 个答案:

答案 0 :(得分:6)

我会说答案是对的。为了与之前的答案保持一致,它应该是:

  • (A(B C)):2列表,3个原子

原因如下:总共有三个原子:A B C。有一个嵌套列表:(B C)和一个外部列表:(A (B C)),总共有两个列表。

如果问题是“计算列表中的顶级元素”,那么说“有1个列表,1个原子”是正确的 - 但这与前两个不一致示例,其中考虑了所有原子和列表,包括外部列表。

答案 1 :(得分:4)

(A (B C)):1个列表,1个原子,1个列表,2个原子

答案 2 :(得分:2)

正如其他人所指出的那样,这个问题有点令人困惑。但即使问题令人困惑,你也可以理解这些概念。

我们来看第一个:

(A B)
这是什么?嗯,这是一个列表,所以它包含较小的东西。好极了!它中有多少元素?不完全是。停在这里回答问题。

...

两个!

      (A B)
       ^ ^
    ___/ \___
   /         \
   |         |
element   element
  one       two

有哪些要素?两个原子:AB。请注意,正如名称“atom”所暗示的那样,它们不能分解为更多元素。

第二个怎么样?

(A B C)

它也是一个列表,但是这个列表中有三个元素,同样是所有原子:ABC

让我们采取第三个,这更令人困惑:

(A (B C))

如果您一直在跟踪,这也是一个列表。它有多少元素?这个比较棘手。

...

二!两个要素。

    (A (B C))
     ^ \___/
     /    \
    /      \
   /        \
   |        |
element  element
  one      two

第一个元素是A,第二个元素是(B C)。但等等,他们的类型是什么?

A是一个原子,但(B C)是一个列表!所以我们递归,并谈论(B C)。这是一个列表,包含两个元素:BC。这两个都是原子,所以我们已经完成了。

所以现在你应该更好地理解列表,即使你从任何书中学到的问题都没有意义。但现在它没有意义,因为它不明确,不是因为你不理解这些概念。

额外的功劳!列出此列表中元素的类型,如果它们是列表,请继续!

(A ((B C) D) (E F))

答案 3 :(得分:0)

我们叫A = Fred
(B C)=乔治
和(A(B C))=金妮。

金妮有多少名单?只有一个。金妮是什么组成的?一个名单,乔治和一个原子,弗雷德。

希望有所帮助。

PS:不要过度思考。

答案 4 :(得分:0)

列表数量=父母数量。原子数=其他一切的数量。让我们应用它:

  • (A B):1个列表,2个原子
  • (A B C):1个列表,3个原子
  • (A(B C)):2列表,3个原子
  • (((1))):3个列表,1个原子
  • (A.B):1(不正确)列表,2个原子