lisp 함수를 작성 중이며 함수에서 x 값을 반환하려고 할 때 EVAL - 정의되지 않은 함수 x가 계속 표시됩니다.lisp에서 정의되지 않은 함수
(defun p+ (x y)
(recurcollect (gluelist x y) '()))
(defun isinlist (x y)
(if (car y)
(if (equal (cdr x) (cdar y))
t
(if (cdr y)
(isinlist(x (cdr y)))
NIL))
NIL))
(defun collectvalue (x y) ;takes an expression and a list and returns the sum of all like expressions from the list
(if (equal x NIL)
(print '(x is NIL))
(if (equal (cdr x) (cdar y))
(if (cdr y)
(collectvalue (list (+ (car x) (caar y)) (cdr x)) (cdr y))
(list (+ (car x) (caar y)) (cdr x)))
(if (cdr y)
(collectvalue x (cdr y))
x))))
(defun recurcollect (x y) ;returns a flat list of collected expressions
(if (isinlist (car x) y)
(recurcollect (cdr x) y)
(if (cdr x)
(recurcollect x (cons y (collectvalue (car x) (cdr x))))
(cons y (car x)))))
(defun gluelist (x y)
(if (cdr x)
(cons (car x) (gluelist (cdr x) y))
(cons (car x) y)))
(print (p+ '(2 0 1) '(4 0 1))) ;(6 0 1)
나는 오류가 함수의 끝에서 X에 의해 발생 생각하지만 난 왜, 지금까지의 내 브래킷이 올바르게 짝 내가 볼 수 없습니다 말할 수있는 이유는 평가하려고 볼 수 없습니다 x를 함수로 사용합니다.
함수를 정의하려고 할 때나 실행하려고 할 때이 문제가 발생합니까? REPL에서 정확하게 평가하는 것은 무엇입니까? – L33tminion
@ L33tminion 실행했을 때 발생합니다. 제가 평가하는 것은 다항식입니다. 각 값은 (계수, 1 차 변수의 힘, 2 차 변수의 지수 등) 3x^2는 (3 2) 3xy^2는 (3 1 2)이 될 것입니다. 에. x는 단일 항이고 y는 다항식을 나타내는 항의 목록입니다. 이 기능의 목적은 모든 유사한 용어를 수집하는 것입니다. – CountBale
코드를 올바르게 포맷하고 (emacs가 대신 할 것입니다.) 완전한 상호 작용 즉, 함수를 호출하는 방법과 Lisp이 인쇄하는 것을 복사하여 붙여 넣으십시오. – sds