Lisp: (A (B C)), почему 1 список и 1 атом?

Я изучаю Lisp и не понимаю некоторых примеров, которые они приводят в курсе по объяснению списков и атомов.

Я понимаю :

  • (AB): 1 список, 2 атома
  • (ABC): 1 список, 3 атома

Я не понимаю эту часть:

  • (A (B C)) : 1 список, 1 атом

После долгих размышлений я думаю, что:

  • A — это атом, а (BC) — список, но я не очень понимаю, почему…

    • why the first and the last parenthesis are not considered as being one list ?
    • почему мы не считаем B и C здесь атомами?

Заранее спасибо за любое просвещение по поводу этой странной вещи :)


person user2305415    schedule 28.05.2013    source источник
comment
Невозможно обойти то, что A, B и C являются атомами.   -  person Gabe    schedule 29.05.2013


Ответы (5)


Я бы сказал, что ответ неверный. Для согласованности с предыдущими ответами это должно было быть:

  • (A (B C)) : 2 списка, 3 атома

И вот почему: всего атомов три: A B C. Есть вложенный список: (B C) и внешний список: (A (B C)), всего два списка.

Было бы правильно сказать, что есть «1 список, 1 атом», если бы вопрос был «подсчитать элементы верхнего уровня внутри списка», но это не согласуется с первыми двумя примерами, которые учитывать все показанные атомы и списки, включая внешний список.

person Óscar López    schedule 28.05.2013
comment
Я читаю его так же, как, кажется, Райнер: (A B) — это один список из двух атомов. (A B C) — это один список из трех атомов. (A (B C)) — это один список из одного атома и один не-атом (который оказывается списком из двух атомов). Оба кажутся внутренне непротиворечивыми способами чтения того, что дано. В идеале, были бы дополнительные примеры, которые устранили бы неоднозначность того, что на самом деле имелось в виду. - person Inaimathi; 30.05.2013
comment
Спасибо всем за ответы, теперь стало понятнее :) прочитав все, я вспомню, что это зависит от того, на каком уровне вы смотрите на вложенные списки. Так что нет однозначного ответа, но это зависит от того, на каком уровне вы ищете. - person user2305415; 30.05.2013

(A (B C)) : 1 список, 1 атом, 1 список, 2 атома

person Rainer Joswig    schedule 28.05.2013

Как указывали другие люди, этот вопрос сбивает с толку. Но вы можете понять концепции, даже если вопросы сбивают с толку.

Возьмем первый:

(A B)

Что это? Ну, это список, так что он содержит меньшие вещи. Ура! Сколько элементов в нем? Нет, правда. Остановитесь здесь и ответьте на вопрос.

...

Два!

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

Что такое элементы? Два атома: A и B. Обратите внимание, что, как следует из названия «атом», их нельзя разбить на дополнительные элементы.

Как насчет второго?

(A B C)

Это тоже список, но в нем три элемента, снова все атомы: A, B и C.

Возьмем третий, более запутанный:

(A (B C))

Если вы отслеживали, это также список. Сколько в нем элементов? Этот хитрее.

...

Два! Два элемента.

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

Первый элемент — A, а второй элемент — (B C). Но подождите, каковы их типы?

A — это атом, а (B C) — это список! Итак, мы повторяемся и говорим о (B C). Это список из двух элементов: B и C. Оба они являются атомами, так что мы закончили.

Итак, теперь вы должны немного лучше понимать списки, даже если вопрос из книги, по которой вы учитесь, не совсем имеет смысла. Но сейчас это не имеет смысла, потому что плохо определено, а не потому, что вы не понимаете концепций.

Дополнительный кредит! Перечислите типы элементов в этом списке, и если это списки, продолжайте!

(A ((B C) D) (E F))
person zck    schedule 30.05.2013
comment
Спасибо за очень ясное объяснение :) Для этого примера (A ((B C) D) (E F)), я теперь буду думать на нескольких уровнях. Для большего уровня у нас есть: 2 атома и 2 списка. Для более точного уровня у нас есть 6 атомов и 4 списка. Не знаю, правильно ли...? - person user2305415; 30.05.2013
comment
Итак, вы думаете, что список состоит из двух атомов и двух списков. Значит, в списке четыре элемента? Кто они такие? - person zck; 31.05.2013

Назовем A = Фред
(BC) = Джордж
и (A (BC)) = Джинни.

Сколько списков у Джинни? Только один. Из чего состоит Джинни? Один список, Джордж, и один атом, Фред.

Надеюсь, это поможет.

P.S. Не переусердствуйте.

person Dmitri    schedule 28.05.2013
comment
Однако, как указал другой ответ, эта интерпретация не согласуется с другими примерами. Если отсчеты справа описывают элементы списка верхнего уровня, то, конечно, «(AB) : 1 список, 2 атома» должно было быть «(AB) : 0 списков, 2 атома», поскольку «(AB)» не содержит списков. - person Joshua Taylor; 29.05.2013

Количество списков = количество родительских пар. Количество атомов = количество всего остального. Давайте применим его:

  • (AB): 1 список, 2 атома
  • (ABC): 1 список, 3 атома
  • (A (B C)) : 2 списка, 3 атома
  • (((1))) : 3 списка, 1 атом
  • (A. B): 1 (неправильный) список, 2 атома
person GoZoner    schedule 29.05.2013