【发布时间】:2013-05-17 09:04:20
【问题描述】:
所以我正在为我的编程语言课处理一些练习题,其中一项任务是创建一个脚本“MyEval”,它允许您进行简单的嵌套加法和乘法运算。
因此,例如该程序将能够做到这一点(MyEval '(1 +(3 *4))) 或更深,但不必做减法或超过 2 个数字和一个运算符。所以没那么复杂。但是我的想法很糟糕,我希望得到一些指导。
这就是我目前所拥有的
#lang racket
(define ns (make-base-namespace))
(define (MyEval lis)
(cond
[(and ; neither is a list and can be evaluated
(not(list? (car lis)))
(not(list? (caddr lis)))
)
(eval (cons (cadr lis) (list (car lis) (caddr lis)) ) ns)]
[(list? (car lis))
(MyEval (car lis))]
[(list? (caddr lis))
(MyEval (caddr lis))]
) ;end of cond
) ;end of define
但是你们可能会注意到这只会解决最后一个内括号,所以如果我这样做 (MyEval '(1 + (1 + 2))) 我得到 3,而不是 4。
感谢任何指导或提示,我不知道我的标题有多准确,但如果不合适,请告诉我。
谢谢!
【问题讨论】:
-
注意:不要使用您环境的底层
eval。如果你这样做了,你就误解了这个任务。