Просмотр исходного кода

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 лет назад: 11
Родитель
Сommit
6f7bdb29ed
1 измененных файлов с 13 добавлено и 0 удалено
  1. 13 0
      scm/evalo.scm

+ 13 - 0
scm/evalo.scm

@ -14,6 +14,16 @@
14 14
       [(== x y) (== v val)]
15 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 27
(define evalo
18 28
  (lambda (expr env val)
19 29
    (conde
@ -22,6 +32,9 @@
22 32
     [(fresh (e)
23 33
        (== `(quote ,e) expr)
24 34
        (== e val))]
35
     [(fresh (els)
36
        (== `(list . ,els) expr)
37
        (evalmanyo els env val))]
25 38
     [(fresh (x body)
26 39
        (== `(lambda (,x) ,body) expr)
27 40
        (== `(closure ,x ,body ,env) val))]