gpt4 book ai didi

使用 +、-、* 和/对表达式执行符号和数字运算的 LISP 函数

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

我目前正在为一个小项目进行 LISP 练习,需要大量帮助。这可能或多或少是初学者的问题,但我完全迷失了编写某个函数,该函数接受两个未计算的函数并根据变量是否被赋值输出结果。

一个例子是

(setq p1 '(+ x (* x (- y (/ z 2)))))

在哪里

(evalexp p1 '( (x 2) (z 8) ))
returns (+ 2 (* 2 (- y 4)))

我的目标是编写 evalexp 函数,但我什至想不出从哪里开始。

目前为止

(defun evalexp (e b) )

.. 不是很多。如果有人可以帮助或引导我朝着好的方向前进,我将不胜感激。

最佳答案

这是一个完整的解决方案。这非常简单,所以我将省略完整的解释。有什么想不通的可以在评论里问我。

(使用 eval 进行实际评估可能不是您在练习/项目中想要的。另一种方式请查找“元循环解释器”。)

(defun apply-env (exp env)
(reduce (lambda (exp bdg) (subst (cadr bdg) (car bdg) exp))
env :initial-value exp))

(defun try-eval (exp)
(if (atom exp)
exp
(let ((exp (mapcar #'try-eval exp)))
(if (every #'numberp (cdr exp))
(eval exp)
exp))))

(defun evalexp (exp env)
(try-eval (apply-env exp env)))

关于使用 +、-、* 和/对表达式执行符号和数字运算的 LISP 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5228328/

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