ikarus/other-libs/test-match.ss

27 lines
619 B
Scheme
Executable File

#!/usr/bin/env scheme-script
(import (ikarus) (match))
(define (constant? x)
(or (number? x) (char? x) (string? x) (boolean? x)))
(define (ee x)
(define (ee x env)
(trace-match foo x
[,c (guard (constant? c)) c]
[,x (guard (symbol? x))
(cond
((assq x env) => cdr)
(else (error 'ee "unbound variable" x)))]
[(let ([,x* ,[v*]] ...) ,b)
(ee b (append (map cons x* v*) env))]
[(+ ,[x] ,[y]) (+ x y)]
[,others (error 'ee "invalid expression" others)]))
(ee x '()))
(pretty-print
(ee '(let ((x 5)) (let ((y (+ x x))) (+ y x)))))
;(new-cafe ee)