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

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

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

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

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

textual
Листинг программы
  1. (append '(1 2 3) '(4 5 6) '(7 8 9) '(a b c))
  2.  
  3. ==> (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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут