Racket 带布尔表达式的plai型内拍

Racket 带布尔表达式的plai型内拍,racket,Racket,所以我在DrRacket中定义了这个“语言”值,我的解析器可以工作,但我在解释器中遇到了错误。 我将表达式类型定义如下: (define-type ValueC [numC (n : number)] [boolC (b : boolean)] [eqC (l : ValueC) (r : ValueC)] [greaterC (l : ValueC) (r : ValueC)] ... [unlessC (l : ValueC) (r : ValueC)])

所以我在DrRacket中定义了这个“语言”值,我的解析器可以工作,但我在解释器中遇到了错误。 我将表达式类型定义如下:

(define-type ValueC
   [numC (n : number)]
   [boolC (b : boolean)]
   [eqC (l : ValueC) (r : ValueC)]
   [greaterC (l : ValueC) (r : ValueC)]
   ...
   [unlessC (l : ValueC) (r : ValueC)])
我还为我的解释器的输出定义了类型:

(define-type Value
  [numV (n : number)]
  [boolV (b : boolean)])
我的解释器本身是这样的:

(define (interp [a : ValueC]) : Value
  (type-case ValueC a
    [numC (n) (numV n)]
    [boolC (b) (boolV b)]
    [plusC (l r) (+ (interp r) (interp l))]
    [multC (l r) (numV (* (interp l) (interp r)))]    
    [eqC (l r) (boolV (= (interp l) (interp r)))]
    [greaterC (l r) (boolV (> (interp l) (interp r)))]
    ...
    [unlessC (l r) (unless (interp r) (interp l))]))
但我收到一条错误消息,上面说:

'typecheck failure: number vs Value sources'

您知道如何更改value的“define type”以消除此问题吗?

我敢打赌代码中的一个或多个表达式会高亮显示。看看他们