-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexample-predicate.lurk
More file actions
53 lines (52 loc) · 2.83 KB
/
example-predicate.lurk
File metadata and controls
53 lines (52 loc) · 2.83 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
42
43
44
45
46
47
48
49
50
51
52
53
;; This predicate verifies that there's a horseman called jesus who rides a white horse.
;; In jq `.horsemen | .[] | select(.name == "jesus") | .horse.color` must be "white".
(letrec ((and (lambda (x y)
(if x y x)))
(any (lambda (p xs)
(if xs
(if (p (car xs))
t
(any p (cdr xs)))
nil)))
(length (lambda (xs)
(if (eq xs nil) 0
(+ 1 (length (cdr xs))))))
(verify-string (lambda (test pair)
(if (eq :string (car pair))
(eq test (cdr pair))
nil)))
(verify-horse (lambda (parsed)
(if (eq :object (car parsed))
(any (lambda (kv)
(if (eq "color" (car kv))
(verify-string "white" (cdr kv))
nil))
(cdr parsed))
nil)))
(verify-horseman (lambda (parsed)
(if (eq :object (car parsed))
(and (any (lambda (kv)
(if (eq "name" (car kv))
(verify-string "jesus" (cdr kv))
nil))
(cdr parsed))
(any (lambda (kv)
(if (eq "horse" (car kv))
(verify-horse (cdr kv))
nil))
(cdr parsed)))
nil)))
(verify-horsemen (lambda (parsed)
(if (eq :array (car parsed))
(and (eq 4 (length (cdr parsed)))
(any verify-horseman (cdr parsed)))
nil)))
(verify-all (lambda (parsed)
(if (eq :object (car parsed))
(any (lambda (kv)
(if (eq "horsemen" (car kv))
(verify-horsemen (cdr kv))
nil))
(cdr parsed))
nil))))
verify-all)