나는 polynimials를 단순화하는 프로그램을 작성하고 있으며, 현재는 덧셈과 곱셈 만 사용하고 있습니다.lisp 단순화 다항식
저는 몇 시간 동안 키보드를 두드리고 키보드를 몇 시간 동안 사용하여 도움을 요청했습니다.
(simplify ‘(+ x (+ 0 3) (* 1 5) (* (* x y z) 0) )) --> (+ x 3 5)
(simplify ‘(* (+ 6 0) (* 1 6 2))) --------------------------------> (* 6 (* 6 2))
대신 내가 하나 같은 난에 전송 다항식, 또는 완전히 꺼 뭔가를 얻을
편집 :
(defun simplify (lis)
(if (eq (car lis) '+)
(cons '+ (simplify-addition (cdr lis)))
(if (eq (car lis) '*)
(cons '* (simplify-multiplication (cdr lis)))
)
)
)
(defun simplify-addition (lis)
(if (not (null lis))
(if (listp (car lis))
(list (simplify (car lis)) (simplify-addition (cdr lis)))
(if (numberp (car lis))
(if (eq (car lis) 0)
(simplify-addition (cdr lis))
(if (null (cdr lis))
lis
(cons (car lis) (simplify-addition (cdr lis)))
)
)
(if (eq (car lis) '+)
(list (car lis) (simplify-addition (cdr lis)))
(if (eq (car lis) '*)
(list (car lis) (simplify-addition (cdr lis)))
lis
)
)
)
)
)
)
(defun simplify-multiplication (lis)
(if (not (null lis))
(if (listp (car lis))
(if (find 0 (car lis))
0
(list (simplify (car lis)) (simplify-multiplication (cdr lis)))
)
(if (numberp (car lis))
(if (null (cdr lis))
lis
(cons (car lis) (simplify-multiplication (cdr lis)))
)
(if (eq (car lis) '+)
(list (car lis) (simplify-multiplication (cdr lis)))
(if (eq (car lis) '*)
(list (car lis) (simplify-multiplication (cdr lis)))
lis
)
)
)
)
)
)
이 발생해야하는 것입니다 내가 필요로하는 단순화하는 것입니다 추가에서 0을 제거하면 다음과 같이됩니다.
(+ 3 0) --> 3
(+ 4 0 6) --> (+ 4 6)
0으로 tiplication이 제거됩니다.
(* 6 0 7) --> 0
들여 쓰기 스타일 +1, 어떤 결과를 얻지 못했는지 -1 – melpomene
한 레벨을 단순화하기로되어 있습니까? 두 번째 예제에서 결과가 72로 단순화 될 수 있기 때문에 물어 보지만 – RonaldBarzell
까지는 함수가 수행해야하는 작업을보다 구체적으로 질문을 업데이트했습니다 (* 6 (* 6 2)). – cocopuffs