Scheme 基准序列后的方案缺失表达式

Scheme 基准序列后的方案缺失表达式,scheme,case,expand,Scheme,Case,Expand,当我在DrRacket中运行此命令时,我收到错误:“case:bad syntax(在数据序列之后缺少表达式):((else exp))。” 这是密码 (define expand (lambda (exp) (if (pair? exp) (case (car exp) ((let) (expand(let-expansion (exp)))) ((and) (expand(and-expansion (exp)))) ((or) (expand(or-expansi

当我在DrRacket中运行此命令时,我收到错误:“case:bad syntax(在数据序列之后缺少表达式):((else exp))。”

这是密码

(define expand (lambda (exp) 
(if (pair? exp)
(case (car exp)
    ((let) (expand(let-expansion (exp))))
    ((and) (expand(and-expansion (exp))))
    ((or) (expand(or-expansion (exp))))
    ((let*) (expand(let*-expansion (exp))))
    ((letrec) (expand(letrec-expansion (exp))))
    ((cond) (expand(cond-expansion (exp))))
    ((case) (expand(case-expansion (exp))))
    ((else exp))))
((exp))))
不确定是什么导致了错误。我是scheme的新手,所以我可能没有正确理解语法


有人能给我解释一下这个函数有什么问题吗?

看起来像是括号问题,试试这个:

(define expand 
  (lambda (exp) 
    (if (pair? exp)
        (case (car exp)
          ((let)    (expand (let-expansion    exp)))
          ((and)    (expand (and-expansion    exp)))
          ((or)     (expand (or-expansion     exp)))
          ((let*)   (expand (let*-expansion   exp)))
          ((letrec) (expand (letrec-expansion exp)))
          ((cond)   (expand (cond-expansion   exp)))
          ((case)   (expand (case-expansion   exp)))
          (else exp))
        exp)))

如果这对您有效,请告诉我,我删除了许多看似不必要的括号,但我不确定
exp
应该是什么样子,因此可能存在潜在的bug