实现一个可以处理if和cond的Scheme解释器

时间:2014-10-24 02:05:57

标签: scheme interpreter

------------------------------------更新---------- ---------------------------

我可以用它很好地工作。

(define (handle-cond exp env)
(if (null? exp) (newline) 
  (if (eq? (caar exp) 'else) (my-eval (cadar exp) env) 
  (if (my-eval (caar exp) env) (my-eval (cadar exp) env) (my-eval (cons 'cond (cdr exp)) env)))))

这与系统的cond之间的区别仅在于没有条件时, 它会打印一个#void,我不太明白为什么,但除此之外,它运行正常。 谢谢大家回答。

1 个答案:

答案 0 :(得分:1)

您必须将cond语句转换为一系列嵌套if。因此,假设每个cond子句都是这样的:

(cond
  (<expr1> <expr2>)
  (<expr3> <expr4>)
  (else <expr5>))

这将成为:

(if <expr1> 
    <expr2>
    (if <expr3>
        <expr4>
        <expr5>))