所以我正在为我的编程语言课做一些练习题,其中一项任务是创建一个脚本“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。感谢任何指导或提示,我不知道我的标题有多准确,但如果不是合适的请告诉我。
谢谢!