Skip to content

Commit 6709dd1

Browse files
committed
move library
1 parent ed18904 commit 6709dd1

25 files changed

+84
-21
lines changed

src/eval/c4_7.scm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
; in eval.scm
22
;
3-
;not need to expand let* in terms of non-derived expressions
3+
; no need to expand let* in terms of non-derived expressions

src/eval/eval.scm

Lines changed: 66 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
(load "./utils/dict.scm")
2-
3-
(define (assert exp)
4-
(if (not exp)
5-
(error 'assert "expression is not true")
6-
exp))
2+
(load "utils/guile.scm")
73

84
(define (assert-eq a b eqproc)
95
(if (not (eqproc a b))
@@ -99,7 +95,7 @@
9995
new-env)
10096
((or (null? vars)
10197
(null? values))
102-
(error 'extend-environment "vars and values should have equal lenght"))
98+
(error 'extend-environment "procedure arguments not match"))
10399
(else
104100
((new-env 'insert) (car vars) (car values))
105101
(iter (cdr vars) (cdr values)))))
@@ -242,9 +238,14 @@
242238
(cadddr proc))
243239

244240
(define (eval-sequence exps env)
245-
(if (last-exp? exps)
246-
(seck-eval (first-exp exps) env)
247-
(eval-sequence (rest-exps exps) env)))
241+
(cond ((null? exps)
242+
(error 'eval-sequence "no expression in code in block"))
243+
(( last-exp? exps)
244+
(seck-eval (first-exp exps) env))
245+
(else
246+
(seck-eval (first-exp exps) env)
247+
(eval-sequence (rest-exps exps) env))
248+
))
248249

249250
; @(assignment)
250251

@@ -264,6 +265,8 @@
264265

265266
; @(defintion)
266267

268+
(define (make-definition name value)
269+
(list 'define name value))
267270
(define (definition? exp)
268271
(tagged-list? exp 'define))
269272

@@ -388,20 +391,39 @@
388391
(define (let? exp)
389392
(tagged-list? exp 'let))
390393

391-
(define (let-bindings exp) (cadr exp))
392-
(define (let-body exp) (cddr exp))
394+
(define (let-bindings exp)
395+
(if (namedlet? exp)
396+
(caddr exp)
397+
(cadr exp)
398+
))
399+
400+
(define (let-body exp)
401+
(if (namedlet? exp)
402+
(cdddr exp)
403+
(cddr exp)
404+
))
393405
(define (let-vars exp) (map car (let-bindings exp)))
394406
; if you define let-values here, there will be
395407
(define (let-vals exp) (map cadr (let-bindings exp)))
408+
(define (namedlet? exp) (symbol? (cadr exp)))
409+
(define (let->name exp) (cadr exp))
396410

397411
(define (let->combination exp)
398-
(let->lambda (let-vars exp)
399-
(let-vals exp) ; todo
400-
(let-body exp)))
412+
(if (namedlet? exp)
413+
(cons (make-lambda '()
414+
(list (make-definition (let->name exp)
415+
(make-lambda (let-vars exp)
416+
(let-body exp)))
417+
(cons (let->name exp)
418+
(let-vals exp))
419+
))
420+
'())
421+
(let->lambda (let-vars exp)
422+
(let-vals exp)
423+
(let-body exp))))
401424

402425
(define (let->lambda vars values body)
403-
(cons (cons 'lambda
404-
(cons vars body))
426+
(cons (make-lambda vars body)
405427
values))
406428

407429
(define (make-let var-bindings body)
@@ -471,6 +493,16 @@
471493
(seck-eval '(set! a 4) new-env)
472494
new-env))
473495

496+
(define test-let-exp '(let ((x 1)
497+
(y 2))
498+
(+ x y)))
499+
(define test-named-let-exp '(let fib-iter ((a 1)
500+
(b 0)
501+
(count 10))
502+
(if (= count 0)
503+
b
504+
(fib-iter (+ a b) a (- count 1)))))
505+
474506
(define (test-eval)
475507
(let ((new-env (init-test-env)))
476508
(assert (= (seck-eval '(+ 1 2) global-env) 3))
@@ -507,4 +539,21 @@
507539
(+ x y z))
508540
new-env)
509541
12))
510-
))
542+
(assert (equal? (seck-eval '(let fib-iter ((a 1)
543+
(b 0)
544+
(count 10))
545+
(if (= count 0)
546+
b
547+
(fib-iter (+ a b)
548+
a
549+
(- count 1))))
550+
new-env)
551+
55))
552+
)
553+
(seck-eval '((lambda ()
554+
(define (foo a) a)
555+
(foo 3)
556+
)
557+
)
558+
global-env)
559+
'pass)

src/eval/utils/dict.scm

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,3 +76,15 @@
7676

7777
(define (dict-set! d key value)
7878
((d 'set) key value))
79+
80+
(define (dict-keys d)
81+
((d 'keys)))
82+
83+
(define (dict-display-keys d keys)
84+
(if (not (null? keys))
85+
(begin
86+
(display (car keys))(display "-")(display (dict-lookup d (car keys)))(newline)
87+
(dict-display-keys d (cdr keys)))))
88+
89+
(define (dict-display d)
90+
(dict-display-keys d (dict-keys d)))
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

src/lib/generic-arithmetic.scm renamed to src/lib/r6rs/generic-arithmetic.scm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
make-complex-from-mag-ang
1313
)
1414

15-
(import (chezscheme)
15+
(import (rnrs)
16+
(rnrs mutable-pairs)
1617
(base)
1718
(complex)
1819
(functional)
File renamed without changes.
File renamed without changes.
File renamed without changes.

src/lib/queue.scm renamed to src/lib/r6rs/queue.scm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
delete-queue!
77
front-queue
88
beautiful-display-queue)
9-
(import (chezscheme))
9+
(import (rnrs)
10+
(rnrs mutable-pairs))
1011

1112
(define (make-queue) (cons '() '()))
1213
(define (front-ptr q) (car q))
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

src/run-test.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ then
66
fi
77
#petite --libdirs lib --script $filename
88

9-
csi -q -I lib -s $filename
9+
csi -q -I lib/r6rs -s $filename

0 commit comments

Comments
 (0)