В списке ((one) for all (and (two (for me))))
есть четыре элемента: список (one)
, символ for
, символ all
и список (and (two (for me)))
.
Если у вас есть вопросы вот так можно поэкспериментировать в REPL:
CL-USER> (setf my-list '())
NIL
CL-USER> (length my-list)
0
Мы создали пустой список my-list
и проверили его длину.
CL-USER> (setf my-sublist '(and (two (for me))))
(AND (TWO (FOR ME)))
CL-USER> (length my-sublist)
2
Мы создали еще один список, my-sublist
. Обратите внимание, что этот список содержит символ and
, а список (two (for me))
. Результат, возвращаемый length
, подтверждает, что my-sublist
содержит два элемента (один символ и один список).
CL-USER> (setf my-list (cons my-sublist my-list))
((AND (TWO (FOR ME))))
CL-USER> (length my-list)
1
У нас есть cons
ed my-sublist
на my-list
, чтобы создать список содержащий один элемент, который является списком (and (two (for me)))
. Обратите внимание, что список my-sublist
, то есть список (and (two (for me)))
содержит два элемента, но список my-list
- на данный момент ((and (two (for me))))
- содержит только one элемент, а именно список my-sublist
.
CL-USER> (setf my-list (cons 'all my-list))
(ALL (AND (TWO (FOR ME))))
CL-USER> (length my-list)
2
CL-USER> (setf my-list (cons 'for my-list))
(FOR ALL (AND (TWO (FOR ME))))
CL-USER> (length my-list)
3
CL-USER> (setf my-list (cons '(one) my-list))
((ONE) FOR ALL (AND (TWO (FOR ME))))
CL-USER> (length my-list)
4
Мы добавили оставшиеся три элемента (символы all
и for
и список (one)
. В результате получается список из четырех элементы, как и ожидалось.