user3005372
user3005372

Reputation: 31

plai-typed interp racket with boolean expressions

So im defining this 'language' ValueC in DrRacket, my parser works but I get errors with the interpreter. I defined my expression types as follows :

(define-type ValueC
   [numC (n : number)]
   [boolC (b : boolean)]
   [eqC (l : ValueC) (r : ValueC)]
   [greaterC (l : ValueC) (r : ValueC)]
   ...
   [unlessC (l : ValueC) (r : ValueC)])

I also did define-type for outputs of my interpreter:

(define-type Value
  [numV (n : number)]
  [boolV (b : boolean)])

And my interpreter itself looks like this:

(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))]))

But I get an error message saying:

'typecheck failure: number vs Value sources'

Any idea how I can change the 'define-type' for value to get rid of this?

Upvotes: 0

Views: 535

Answers (1)

John Clements
John Clements

Reputation: 17203

I'm willing to bet that one or more expressions in your code are highlighted. Take a look at them!

Upvotes: 0

Related Questions