calc: comment updates, import fixes
This commit is contained in:
parent
6f85490fa3
commit
1180255e7b
|
@ -93,7 +93,10 @@
|
||||||
|
|
||||||
; --- Calculator ---------------------------------------------------------------
|
; --- Calculator ---------------------------------------------------------------
|
||||||
|
|
||||||
; Evaluator derived from the example in The Scheme Programming Language
|
; Evaluator derived from the example in The Scheme Programming Language.
|
||||||
|
;
|
||||||
|
; Even though EVAL with a carefully crafted environment would also do a good
|
||||||
|
; job at sandboxing, it would probably be impossible to limit execution time...
|
||||||
|
|
||||||
(define (env-new formals actuals env)
|
(define (env-new formals actuals env)
|
||||||
(cond [(null? formals) env]
|
(cond [(null? formals) env]
|
||||||
|
@ -108,7 +111,8 @@
|
||||||
(error 'check-reductions "reduction limit exceeded")
|
(error 'check-reductions "reduction limit exceeded")
|
||||||
(set-car! r (- (car r) 1))))
|
(set-car! r (- (car r) 1))))
|
||||||
|
|
||||||
; TODO - think about implementing more syntactical constructs
|
; TODO - think about implementing more syntactical constructs,
|
||||||
|
; however there's not much point in having anything else in a calculator...
|
||||||
(define (exec expr r env)
|
(define (exec expr r env)
|
||||||
(check-reductions r)
|
(check-reductions r)
|
||||||
(cond [(symbol? expr) (env-lookup expr env)]
|
(cond [(symbol? expr) (env-lookup expr env)]
|
||||||
|
@ -135,6 +139,7 @@
|
||||||
[(_) '()]
|
[(_) '()]
|
||||||
[(_ a b ...) (cons (cons (quote a) a) (forward b ...))]))
|
[(_ a b ...) (cons (cons (quote a) a) (forward b ...))]))
|
||||||
|
|
||||||
|
; ...which can't prevent me from simply importing most of the standard library
|
||||||
(define base-library
|
(define base-library
|
||||||
(forward
|
(forward
|
||||||
; Equivalence, procedure predicate, booleans
|
; Equivalence, procedure predicate, booleans
|
||||||
|
@ -158,12 +163,12 @@
|
||||||
symbol? symbol=? symbol->string string->symbol
|
symbol? symbol=? symbol->string string->symbol
|
||||||
; Characters
|
; Characters
|
||||||
char? char=? char<? char>? char<=? char>=? char->integer integer->char
|
char? char=? char<? char>? char<=? char>=? char->integer integer->char
|
||||||
; Strings; XXX make-string can make an arbitrary length string -> removed
|
; Strings; XXX - omitted make-string - can cause OOM
|
||||||
string? string=? string<? string>? string<=? string>=?
|
string? string=? string<? string>? string<=? string>=?
|
||||||
make-string string string-length string-ref substring
|
string string-length string-ref substring
|
||||||
string-append string->list list->string string-for-each string-copy
|
string-append string->list list->string string-for-each string-copy
|
||||||
; Vectors; XXX make-vector can make an arbitrary length vectors -> removed
|
; Vectors; XXX - omitted make-vector - can cause OOM
|
||||||
vector? make-vector vector vector-length vector-ref vector-set!
|
vector? vector vector-length vector-ref vector-set!
|
||||||
vector->list list->vector vector-fill! vector-map vector-for-each
|
vector->list list->vector vector-fill! vector-map vector-for-each
|
||||||
; Control features
|
; Control features
|
||||||
apply call/cc values call-with-values dynamic-wind))
|
apply call/cc values call-with-values dynamic-wind))
|
||||||
|
|
Loading…
Reference in New Issue