#lang typed-scheme (require scheme/match) ;; First order language + interpreter. (define-struct: Let (variable expression body)) (define-struct: Plus (a b)) ;; (define (bind variable expression env) ;; (cons (cons variable expression) env)) ;; ;; eval ;; (define (interpret expression environment) ;; (match expression ;; ((struct Let (var exp body)) ;; (interpret body ;; (bind var ;; (interpret exp environment) ;; strict ;; environment))) ;; ((struct Plus (a b)) (+ a b)) ;; (else expression))) ;; self-eval ;; apply ;; (define (invoke fn