gpt4 book ai didi

lisp - 简化和评估 LISP 中的表达式

转载 作者:太空宇宙 更新时间:2023-11-03 19:02:11 25 4
gpt4 key购买 nike

我正在尝试创建一个 lisp 函数来评估和简化乘法和加法运算。该函数应该这样工作,当用户调用函数时(simplify-Mult'(* 1 2)) 它只打印 2 或(simplify-Mult '(*0 3 3 7)) 仅打印 0。

到目前为止我有这个

(defun simplify-multiplication (lis)
(if (not (null lis))
(if (member '0 lis) 0
(if (member '1 lis) cdr lis
(if (listp (car lis))
(cons(simplify(car lis)))
(if (numberp (car lis))
(if (null (cdr lis))
lis
(cons (car lis) (simplify-multiplication (cdr lis)))
)
(if (eq (car lis) '+)
(cons (car lis) (simplify-multiplication (cdr lis)))
(if (eq (car lis) '*)
(cons (car lis) (simplify-multiplication (cdr lis)))
lis
)
)
)
)

)
)
)
)

最佳答案

您可以编写一个函数 simplify ,它对乘法和加法应用化简规则。如果你想递归地简化一个表达式,首先你必须简化每个参数,然后对相应的操作应用简化规则。以下内容可以作为起点:

(defun simplify (lis)
(if (atom lis)
lis
(let ((args (mapcar #'simplify (cdr lis))))
(cond
((eql (car lis) '+)
(setq args (remove 0 args))
(case (length args)
(0 0)
(1 (car args))
(otherwise (cons '+ args)) ))
((eql (car lis) '*)
(if (member 0 args)
0
(progn
(setq args (remove 1 args))
(case (length args)
(0 1)
(1 (car args))
(otherwise (cons '* args)) ))))
(T (cons (car lis) args)) ))))

您可能想要添加其他简化规则,例如 (* 2 (* 3 4)) => (* 2 3 4) 等。以及检测错误的表达式,例如 (simplify '(+) ).

关于lisp - 简化和评估 LISP 中的表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33405065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com