Я хочу создать функцию, которая могла бы прочитать мои 2 входных списка и объединить то, что находится внутри списков, в 1 список, что позволяет мне использовать этот 1 список для другой функции.Lisp: Как использовать функцию let для объединения 2 списков в 1 список?
Я пытался использовать пусть функцию
(defun sumup(p1 p2)
(let ((sum (append(list p1 p2))))
(format t "the sum is ~a" sum)
(poly sum)
))
и когда я вхожу входной список
(sumup+ '(5 (x 2)) '(3 (x 2)))
это дает результаты, как
the sum is ((5 (x 2)) (3 (x 2)))
the poly term is (8 (x 2))
Вот функция поли, которая прочитает список ввода и добавит.
(defun poly (p1)
(let((x1(car(car(cdr(car p1))))) (x2(car(car(cdr(car(cdr p1))))))
(e1(car(cdr(car(cdr(car p1)))))) (e2(car(cdr(car(cdr(car(cdr p1)))))))
(c1(car(car p1))) (c2(car(car(cdr p1))))
(remainder(cdr(cdr p1)))
)
(if(and(null remainder)(null c2))
(format t "the poly term is (~a (~a ~a))" c1 x1 e1)
)
(if(and(equal x1 x2)(equal e1 e2))
(poly(append (list(list(+ c1 c2)(list x1 e1))) remainder)))
)
)
так с этой функцией поли
(poly '((5(x 3))(3(x 3))(1(x 3))(4(x 3))))
вы получите
the poly term is (13 (x 3))
поэтому мой выбранный формат для представления 5x^2 будет (5 (х 2)), поэтому я цитирую.
функция sumup способна объединить 2 условия, но если
(sumup+ '(5 (x 2)) '((3 (x 2)) (2 (x 2))))
я получу
the sum is ((5 (x 2)) ((3 (x 2)) (2 (x 2))))
, как я могу изменить его, чтобы быть ((5 (x 2)) (3 (x 2)) (2 (x 2))
, которые могут быть использованы для poly
функции?
'sum' - лексическая переменная, которая является локальной формой' let' в функции 'sumup' и частной для нее. Это означает, что переменная 'sum' видна только формам, содержащимся внутри формы' let', которая связывает переменную. 'sum' не видна за пределами' let', и поэтому она не видна вне функции, которая содержит let. 'let' does ** not ** mean *" пусть будет известно, что этот символ ссылается на это значение ** везде ** в этой программе "*.Для этого вы можете использовать глобальную переменную ('defvar',' defparameter', 'defconstant'). – Kaz
Спасибо за объяснение, извините, я не дал понять, как выше код, который я хотел показать, я думал, что сумма будет работать как список. Я попытался использовать сумму в функции sumup и создать форму, и все же SUM не является списком. – mesue
Что делает 'poly'? Замените 'poly' на' listp' и 'T', что означает, что' sum' - это, по сути, список (проверенный в .CLISP 2.49) – 8bittree