У меня есть функция:
(defun multi-push (L P)
(print (if L "T" "F"))
(print P)
(when L
(multi-push (cdr L) (push (car L) P)))
P)
который я сделал, чтобы попытаться поместить список в другой список (я знаю, что список ввода L
перевернут. Это сделано по дизайну). Операторы печати имеют смысл, но когда я смотрю на переменную P
, она не видоизменяется, как я ожидаю.
Пример вывода REPL:
CL-USER> bob
(3 3 3)
CL-USER> (multi-push (list 1 2) bob)
"T"
(3 3 3)
"T"
(1 3 3 3)
"F"
(2 1 3 3 3)
(1 3 3 3)
CL-USER> bob
(3 3 3)
Что я сделал не так? Я думал PUSH
(согласно [http://clhs.lisp.se/Body/m_push.htm]) изменяет свой второй аргумент на месте. Я также пробовал варианты, в которых я POP
L
и PUSH
на P
перед вызовом multi-push
на L
и P
снова.
следует отметить, что строка (1 3 3 3)
является выходом функции multi-push
. Это также смущает меня.
multipush
— это функция, но обратите внимание, чтоpush
— это макрос. Это по уважительной причине. - person Kaz   schedule 06.01.2020