LINUX.ORG.RU

Могу предположить, что проблема в использовании разрушающих операций с литеральными списками. Замени

'(1 2 3)

на

(list 1 2 3)

И дальше по аналогии.

И убедись, что эти функции не требуют присваивания своего результата (Emacs'а под рукой нет, доков тоже).

theNamelessOne ★★★★★
()
Ответ на: комментарий от theNamelessOne

И убедись, что эти функции не требуют присваивания своего результата (Emacs'а под рукой нет, доков тоже).

Вот ведь... Именно в этом дело. В документации написано, что аргументы модифицируются при неободимости... И в Common Lisp, оказывается, они точно так же работают.

Спасибо

arte-at-marte
() автор топика
Ответ на: комментарий от arte-at-marte

Вот и хорошо.

И совет про литеральные списки остается в силе: по крайней мере в CL их модификация приводит к undefined behavior.

theNamelessOne ★★★★★
()

То, что возвращает cl-delete, нужно присваивать переменной a, потому что это функция, а не процедура (если пользоваться терминологией Pascal).

anonymous
()
Ответ на: комментарий от theNamelessOne

Главный профит этих разрушающих функций - утилизация. Cons ячейки из a разрушаются и из них создаётся новый список, в отличии от union где новый список формируется из новых ячеек. Содержимое a естественно изменяется, но как - стандарт CL ложит на это болт. Главное - результат в возврате функции.

ados ★★★★★
()
Последнее исправление: ados (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.