1234567891011121314151617181920212223242526 |
- #lang racket
- (require racket/match)
- (define builtins
- `((car . ,car)
- (cdr . ,cdr)
- (cons . ,cons)
- (+ . ,+)
- (- . ,-)
- (* . ,*)
- (/ . ,/)))
- (define (i exp)
- (match exp
- ((? number? n) n)
- ((? symbol? s)
- (cond ((assoc s builtins) => cdr)
- (else (error "unbound variable" s))))
- ((? list? l)
- (apply (i (car l)) (map i (cdr l))))
- (else (error "unknown expression type" exp))))
- ;; > (i '(+ 7 (car (cons 3 5))))
- ;; 10
|