forked from JuliaLang/julia
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutils.scm
43 lines (37 loc) · 1.04 KB
/
utils.scm
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
42
43
(define (prn x)
(with-output-to *stderr*
(display x) (newline))
x)
(define (lookup elt alst default)
(let ((a (assq elt alst)))
(if a (cdr a) default)))
(define (index-p pred lst start)
(cond ((null? lst) #f)
((pred (car lst)) start)
(else (index-p pred (cdr lst) (+ start 1)))))
(define (diff s1 s2)
(cond ((null? s1) '())
((memq (car s1) s2) (diff (cdr s1) s2))
(else (cons (car s1) (diff (cdr s1) s2)))))
(define (unique lst)
(if (null? lst)
'()
(if (memq (car lst) (cdr lst))
(unique (cdr lst))
(cons (car lst) (unique (cdr lst))))))
(define (contains p expr)
(or (p expr)
(and (pair? expr)
(any (lambda (x) (contains p x))
expr))))
(define *gensyms* '())
(define *current-gensyms* '())
(define (gensy)
(if (null? *current-gensyms*)
(let ((g (gensym)))
(set! *gensyms* (cons g *gensyms*))
g)
(begin0 (car *current-gensyms*)
(set! *current-gensyms* (cdr *current-gensyms*)))))
(define (reset-gensyms)
(set! *current-gensyms* *gensyms*))