-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathlighteval.sls
More file actions
41 lines (35 loc) · 1.24 KB
/
Copy pathlighteval.sls
File metadata and controls
41 lines (35 loc) · 1.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
(library (yuni lighteval)
(export
make-lighteval-env
lighteval-bind
lighteval-env-add-globals!
lighteval-env-ref
lighteval-env-set!)
(import (yuni scheme)
(yuni hashtables)
(yuni compat lighteval))
(define (make-lighteval-env)
(make-symbol-hashtable))
(define (lighteval-env-ref env sym alt)
(hashtable-ref env sym alt))
(define (lighteval-env-set! env sym obj)
(hashtable-set! env sym obj))
(define (lighteval-env-add-globals! env alist)
(let ((names (map car alist))
(code (map (lambda (p)
(let ((name (car p))
(obj (cdr p)))
(list name obj)))
alist)))
(let ((out (lighteval-bind env `(letrec* ,code (list ,@names)))))
(for-each (lambda (name obj)
(lighteval-env-set! env name obj))
names
out))))
(define (lighteval-bind env frm)
(let-values (((k v) (hashtable-entries env)))
(let* ((names (vector->list k))
(objs (vector->list v))
(proc (eval/yuni `(lambda ,names ,frm))))
(apply proc objs))))
)