Petite Chez Scheme Version 6.0a Copyright (c) 1998 Cadence Research Systems loading d:/classes/cs342/lib/displayln.scm ... loading d:/classes/cs342/lib/test-homework.scm ... loading D:/scheme/scm/slib/require.scm ... loading D:/scheme/scm/slib/random.scm ... loading D:/scheme/scm/slib/byte.scm ... loading D:/scheme/scm/slib/logical.scm ... loading D:/scheme/scm/slib/randinex.scm ... loading d:/classes/cs342/lib/r5rs.scm ... loading d:/classes/cs342/lib/sllgen.scm ... sllgen.scm 2000-09-25 11:48 loading d:/classes/cs342/lib/define-datatype.scm ... define-datatype.scm version J3 2001-08-26 07:44 loading d:/classes/cs342/lib/test-harness.scm ... test-harness.scm: unified test harness 2000-12-21 15:24 loading d:/classes/cs342/lib/type-predicates.scm ... loading D:/scheme/scm/slib/hashtab.scm ... loading D:/scheme/scm/slib/hash.scm ... loading D:/scheme/scm/slib/alist.scm ... Typed Scheme interpreter loop (by Curtis Clifton and Gary T. Leavens) Use "(type-help)" to list options. typed> (load "my-3-5.scm") Type checking "my-3-5.scm" ... Type checking "my-3-5-grammar.scm" ... ... done type checking "my-3-5-grammar.scm" Type checking "my-procval-as-ast.scm" ... ... done type checking "my-procval-as-ast.scm" Type checking "3-5-expressed-value-with-lists.scm" ... ... done type checking "3-5-expressed-value-with-lists.scm" ... done type checking "my-3-5.scm" run : (-> (string) expressed-value) run-all : (-> () void) run-one : (-> (symbol) void) equal-external-reps? : (-> (datum datum) boolean) show-the-datatypes : (-> () (list-of datum)) scan&parse : (-> (string) program) just-scan : (forall (t) (-> (string) (list-of t))) read-eval-print : (-> () poof) procval? : (type-predicate-for procval) closure : (-> ((list-of symbol) expression environment) procval) traced-closure : (-> ((list-of symbol) expression environment) procval) apply-procval : (-> (procval (list-of expressed-value)) expressed-value) number->expressed : (-> (number) expressed-value) procval->expressed : (-> (procval) expressed-value) list->expressed : (-> ((list-of expressed-value)) expressed-value) expressed->number : (-> (expressed-value) number) expressed->procval : (-> (expressed-value) procval) expressed->list : (-> (expressed-value) (list-of expressed-value)) denoted->expressed : (-> (denoted-value) expressed-value) expressed->denoted : (-> (expressed-value) denoted-value) environment? : (type-predicate-for environment) empty-env : (-> () environment) extend-env : (-> ((list-of symbol) (list-of expressed-value) environment) environment) apply-env : (-> (environment symbol) expressed-value) defined-in-env? : (-> (environment symbol) boolean) true-value? : (-> (expressed-value) boolean) boolean->expressed : (-> (boolean) expressed-value) eval-program : (-> (program) expressed-value) eval-expression : (-> (expression environment) expressed-value) eval-rands : (-> ((list-of expression) environment) expressed-value) eval-rand : (-> (expression environment) expressed-value) apply-primitive : (-> (primitive (list-of expressed-value)) expressed-value) init-env : (-> () environment) program? : (type-predicate-for program) program : (forall (t) (variant-record (a-program (exp t)))) a-program : (forall (t) (-> (t) program)) expression? : (type-predicate-for expression) expression : (forall (s t) (variant-record (lit-exp (datum number)) (var-exp (id symbol)) (primapp-exp (prim s) (rands (list-of t))) (if-exp (test-exp t) (true-exp t) (false-exp t)) (let-exp (ids (list-of symbol)) (rands (list-of t)) (body t)) (proc-exp (ids (list-of symbol)) (body t)) (traceproc-exp (ids (list-of symbol)) (body t)) (app-exp (rator t) (rands (list-of t))) (begin-exp (first t) (rest (list-of t))))) lit-exp : (-> (number) expression) var-exp : (-> (symbol) expression) primapp-exp : (forall (s t) (-> (s (list-of t)) expression)) if-exp : (forall (t) (-> (t t t) expression)) let-exp : (forall (t) (-> ((list-of symbol) (list-of t) t) expression)) proc-exp : (forall (t) (-> ((list-of symbol) t) expression)) traceproc-exp : (forall (t) (-> ((list-of symbol) t) expression)) app-exp : (forall (t) (-> (t (list-of t)) expression)) begin-exp : (forall (t) (-> (t (list-of t)) expression)) primitive? : (type-predicate-for primitive) primitive : (variant-record (add-prim) (subtract-prim) (mult-prim) (incr-prim) (decr-prim) (zero-test-prim) (print-prim) (minus-prim) (cons-prim) (car-prim) (cdr-prim) (list-prim) (equal?-prim) (greater?-prim) (less?-prim) (null?-prim) (apply-prim)) add-prim : (-> () primitive) subtract-prim : (-> () primitive) mult-prim : (-> () primitive) incr-prim : (-> () primitive) decr-prim : (-> () primitive) zero-test-prim : (-> () primitive) print-prim : (-> () primitive) minus-prim : (-> () primitive) cons-prim : (-> () primitive) car-prim : (-> () primitive) cdr-prim : (-> () primitive) list-prim : (-> () primitive) equal?-prim : (-> () primitive) greater?-prim : (-> () primitive) less?-prim : (-> () primitive) null?-prim : (-> () primitive) apply-prim : (-> () primitive) the-lexical-spec : (list-of (list-of datum)) the-grammar : (list-of (list-of datum)) loading my-3-5.scm ... Name: Gary T. Leavens Section: all 3-5.scm: language with procedures 2001-05-10 16:12 loading my-3-5-grammar.scm ... loading my-procval-as-ast.scm ... loading d:/classes/cs342/lib/3-5-expressed-value-with-lists.scm ... typed> (test-hw7 "traceproc") loading d:/classes/cs342/homework/current/hw7/traceproc.tst ... Test case of $Date: 2001/12/05 00:08:34 $ (run "let double = traceproc(z) *(z,2) in (double 3)") Call of traceproc(z) with arguments: (3) Return of traceproc(z) with result: 6 ==> 6 (run "+(3, let double = traceproc(z) *(z,2) in (double 3))") Call of traceproc(z) with arguments: (3) Return of traceproc(z) with result: 6 ==> 9 (run "let makemult = traceproc (maker, x) if x then +(4,(maker maker -(x,1))) else 0 in let times4 = traceproc (x) (makemult makemult x) in (times4 3)") Call of traceproc(x) with arguments: (3) Call of traceproc(maker, x) with arguments: ( 3) Call of traceproc(maker, x) with arguments: ( 2) Call of traceproc(maker, x) with arguments: ( 1) Call of traceproc(maker, x) with arguments: ( 0) Return of traceproc(maker, x) with result: 0 Return of traceproc(maker, x) with result: 4 Return of traceproc(maker, x) with result: 8 Return of traceproc(maker, x) with result: 12 Return of traceproc(x) with result: 12 ==> 12 All tests passed! # : void typed> (quit) Process scheme finished