Quellcode durchsuchen

implement list.

i *think* it's correct, but i'm not quite sure. and even if it is
correct, is it a good way to implement it?
Lucas Stadler vor 11 Jahren
Ursprung
Commit
6f7bdb29ed
1 geänderte Dateien mit 13 neuen und 0 gelöschten Zeilen
  1. 13 0
      scm/evalo.scm

+ 13 - 0
scm/evalo.scm

14
       [(== x y) (== v val)]
14
       [(== x y) (== v val)]
15
       [(=/= x y) (lookupo x rest val)]))))
15
       [(=/= x y) (lookupo x rest val)]))))
16
16
17
(define evalmanyo
18
  (lambda (l env r)
19
    (conde
20
     [(== l '()) (== l r)]
21
     [(fresh (h t h^ t^)
22
        (== l `(,h  . ,t))
23
        (== r `(,h^ . ,t^))
24
        (evalo h env h^)
25
        (evalmanyo t env t^))])))
26
17
(define evalo
27
(define evalo
18
  (lambda (expr env val)
28
  (lambda (expr env val)
19
    (conde
29
    (conde
22
     [(fresh (e)
32
     [(fresh (e)
23
        (== `(quote ,e) expr)
33
        (== `(quote ,e) expr)
24
        (== e val))]
34
        (== e val))]
35
     [(fresh (els)
36
        (== `(list . ,els) expr)
37
        (evalmanyo els env val))]
25
     [(fresh (x body)
38
     [(fresh (x body)
26
        (== `(lambda (,x) ,body) expr)
39
        (== `(lambda (,x) ,body) expr)
27
        (== `(closure ,x ,body ,env) val))]
40
        (== `(closure ,x ,body ,env) val))]