i1.scm 464 B

1234567891011121314151617181920212223242526
  1. #lang racket
  2. (require racket/match)
  3. (define builtins
  4. `((car . ,car)
  5. (cdr . ,cdr)
  6. (cons . ,cons)
  7. (+ . ,+)
  8. (- . ,-)
  9. (* . ,*)
  10. (/ . ,/)))
  11. (define (i exp)
  12. (match exp
  13. ((? number? n) n)
  14. ((? symbol? s)
  15. (cond ((assoc s builtins) => cdr)
  16. (else (error "unbound variable" s))))
  17. ((? list? l)
  18. (apply (i (car l)) (map i (cdr l))))
  19. (else (error "unknown expression type" exp))))
  20. ;; > (i '(+ 7 (car (cons 3 5))))
  21. ;; 10