/
util.scm
33 lines (30 loc) · 856 Bytes
/
util.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
;; utility
(define (fold kons knil lst)
(let loop ((acc knil)
(lst lst))
(if (null? lst)
acc
(loop (kons (car lst) acc)
(cdr lst)))))
(define (parser-error . args)
(for-each
(lambda (x)
(if (not (string? x))
(write x (current-error-port))
(display x (current-error-port))))
args)
(newline (current-error-port))
#f)
(define-macro (assert test . result)
`(let ((res ,test))
(if (not ,(if (pair? result)
`(equal? res ,(car result))
'res))
(begin
(parser-error " *** ASSERTION FAILURE *** ")
(parser-error ',test)
(parser-error res " != "
,(if (pair? result)
(car result)
#t))
(exit 1)))))