-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathexamples.el
91 lines (77 loc) · 1.53 KB
/
examples.el
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
(require 'cl-lib)
(require 'mbe)
(cl-assert
(equal
'(1 2)
(mbe-bind
(a b)
(list 1 2)
(list a b))))
(cl-assert
(equal
'(1 (2 3 4 5))
(mbe-bind
(a b ...)
(list 1 2 3 4 5)
(list a b))))
(cl-assert
(equal
'((a b c) (1 2 3))
(mbe-bind
((a b) ...)
`((a 1) (b 2) (c 3))
(list a b))))
(cl-assert
(equal
'((a b c) ((1 "alpha" "beta") (2) (3 "gamma")))
(mbe-bind
((a b ...) ...)
`((a 1 "alpha" "beta") (b 2) (c 3 "gamma"))
(list a b))))
(cl-assert
(equal '(7 6 (5 4))
(mbe-bind
(a b c ... 3 2 1)
'(7 6 5 4 3 2 1)
(list a b c))))
(cl-assert
(equal '(1 2 (3 4 5 6 7) 8 9)
(mbe-bind
(a b c ... d e)
'(1 2 3 4 5 6 7 8 9)
(list a b c d e))))
(cl-assert
(equal '(1 2 (3 4 5 6 7) 8 9 nil)
(mbe-bind
(a b c ... d e . f)
'(1 2 3 4 5 6 7 8 9)
(list a b c d e f))))
(cl-assert
(equal '(1 2 (3 4 5 6) 7 8 9)
(mbe-bind
(a b c ... d e . f)
'(1 2 3 4 5 6 7 8 . 9)
(list a b c d e f))))
(mbe-defrule mylet (((var val) ...) body ...)
(funcall (lambda (var ...) body ...) val ...))
(mbe-defrule mylet* (((var val) ...) body ...)
(mylet*-helper (var ...) (val ...) (body ...)))
(mbe-defrules mylet*-helper
((nil nil body) (progn . body))
(((var . vars) (val . vals) body)
(mylet ((var val))
(mylet*-helper vars vals body))))
(cl-assert
(equal 5
(mylet ((a 1) (b 2)) (+ b b a))))
(cl-assert
(equal
'(2 3 1)
(mylet* ((a 1)
(b 2)
(c 3)
(tmp a)
(a b)
(b c)
(c tmp))
(list a b c))))