Странное поведение append - Lisp

Узнай цену своей работы

Формулировка задачи:

Как многие из Вас (я надеюсь) знают, "append" делает из двух списков один. Вот код данной процедуры:
(define (append list1 list2)
(if (null? list1)
list2
(cons (car list1) (append (cdr list1) list2))))
Вот собственно сама загвостка: Почему, если я передаю в append списки "напрямую", то всё норм, а если передаю списки из другого списка, с помощью car и cdr, то он оборачивает в дополнительные скобки?!
(define x (list (list 1 2) (list 3 4)))
 
(append (list 1 2) (list 3 4))
Выводит: '(1 2 3 4)
 
(append (car x) (cdr x))
Выводит: '(1 2 (3 4))

Решение задачи: «Странное поведение append»

textual
Листинг программы
(append '(1 2 3) '(4 5 6) '(7 8 9) '(a b c))
 
==> (1 2 3 4 5 6 7 8 9 A B C)

Объяснение кода листинга программы

В данном коде происходит операция объединения (append) нескольких списков в один. В данном случае, четыре списка:

  1. '(1 2 3)
  2. '(4 5 6)
  3. '(7 8 9)
  4. '(a b c) Объединяются в один список: '(1 2 3 4 5 6 7 8 9 A B C'

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.8 из 5