【发布时间】:2021-12-29 15:08:33
【问题描述】:
(define repl (lambda (env)
(let* (
(dummy1 (display "cs305> "))
(expr (read))
(new-env (if (define-stmt? expr)
(extend-env (cadr expr) (s6-interpret (caddr expr) env) env) env)
)
(val
(cond
((define-stmt? expr) (cadr expr))
((and (if-stmt? expr) (= (cadr expr) 0) ) (cadddr expr))
((and (if-stmt? expr) (not(= (cadr expr) 0)) ) (caddr expr))
(else (s6-interpret expr env))
)
)
(dummy2 (display "cs305: "))
(dummy3 (display val))
(dummy4 (newline))
(dummy4 (newline)))
(repl new-env))))
应该是这样的
cs305> (if (- 5 x) (+ x 1) (* x 2))
cs305: 10
但我得到6,但它应该是0,因为x 被定义为5。这里的函数有什么问题?
【问题讨论】:
-
所有这些
dummyX变量有什么意义?如果您想在不使用结果的情况下执行表达式,只需将它们放在let的正文中即可。 -
我是新手,这是一个家庭作业,这就是我们有假人的原因。所以
if-stmt行是正确的,对吧?我如何在这里使用 let?你能证明我真的很想学习@Barmar -
为什么需要
if-stmt?的特殊条件s6-interpret不知道如何解释if表达式?
标签: scheme