nydp 0.1.10 → 0.1.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/lisp/core-030-syntax.nydp +20 -7
- data/lib/lisp/core-040-utils.nydp +4 -6
- data/lib/lisp/core-100-utils.nydp +22 -0
- data/lib/lisp/tests/builtin-tests.nydp +11 -2
- data/lib/lisp/tests/collect-tests.nydp +33 -0
- data/lib/lisp/tests/date-examples.nydp +5 -1
- data/lib/lisp/tests/hash-examples.nydp +5 -0
- data/lib/lisp/tests/include-examples.nydp +23 -0
- data/lib/lisp/tests/mapsum-examples.nydp +10 -0
- data/lib/lisp/tests/returning-examples.nydp +6 -0
- data/lib/nydp/date.rb +8 -1
- data/lib/nydp/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e297c2db504d03a1ae69c9b084c42d2967c409f6
|
4
|
+
data.tar.gz: 14ef550b291308d9fe1b5804a17e82733df7d46e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9b0ee4357faaf3d0d4f2a7be37df48eac75877c3e717c32ac05ab1e57372d36764f2f1d185ba4acbba90e34bb5f73ea8c1165fc8db4d640762ee42bdaedf6985
|
7
|
+
data.tar.gz: 36bd8b57e1b6dfb3634129806931b5d0b4e69caaa7bff59f0540c68a34ad9fc18d96b11d360069a1f38aa474e279b5e75db54fd198bd10fb66553fc73519d760
|
@@ -1,3 +1,12 @@
|
|
1
|
+
(mac and args
|
2
|
+
; returns last arg if all 'args evaluate to non-nil
|
3
|
+
; nil otherwise
|
4
|
+
(if args
|
5
|
+
(if (cdr args)
|
6
|
+
`(if ,(car args) (and ,@(cdr args)))
|
7
|
+
(car args))
|
8
|
+
't))
|
9
|
+
|
1
10
|
(def orf args
|
2
11
|
; evaluates each arg in 'args, returns the
|
3
12
|
; first non-nil value, or nil if they are
|
@@ -8,6 +17,12 @@
|
|
8
17
|
(apply orf
|
9
18
|
(cdr args)))))
|
10
19
|
|
20
|
+
(def caris (obj things)
|
21
|
+
; returns true if 'things is a list and the first item of the
|
22
|
+
; list is the given object
|
23
|
+
(and (isa 'pair things)
|
24
|
+
(eq? (car things) obj)))
|
25
|
+
|
11
26
|
(mac unless (arg . body)
|
12
27
|
; evaluate 'body if 'arg is nil
|
13
28
|
`(if (no ,arg) (do ,@body)))
|
@@ -56,13 +71,6 @@
|
|
56
71
|
`(colon-syntax no ,@(cdar rest))
|
57
72
|
`(colon-syntax no ,(car rest)))))
|
58
73
|
|
59
|
-
(mac and args
|
60
|
-
(if args
|
61
|
-
(if (cdr args)
|
62
|
-
`(if ,(car args) (and ,@(cdr args)))
|
63
|
-
(car args))
|
64
|
-
't))
|
65
|
-
|
66
74
|
(mac when (condition . body)
|
67
75
|
`(cond ,condition (do ,@body)))
|
68
76
|
|
@@ -209,3 +217,8 @@
|
|
209
217
|
(no (cdr args))
|
210
218
|
`(brace-list-mono ,(car args))
|
211
219
|
(brace-list-build-hash args)))
|
220
|
+
|
221
|
+
(mac returning (val . body)
|
222
|
+
; stores ,val, executes ,@body, and returns ,val.
|
223
|
+
(w/uniq retval
|
224
|
+
`(let ,retval ,val ,@body ,retval)))
|
@@ -53,6 +53,10 @@
|
|
53
53
|
(f items)
|
54
54
|
items)))
|
55
55
|
|
56
|
+
(def reject (f things)
|
57
|
+
; return all the items in 'things for which 'f returns nil
|
58
|
+
(collect !f things))
|
59
|
+
|
56
60
|
(def nth (n things)
|
57
61
|
; returns the n-th item in the list 'things
|
58
62
|
(if (eq? n 0)
|
@@ -72,12 +76,6 @@
|
|
72
76
|
(mac just (arg) arg)
|
73
77
|
(def quotify (arg) `(quote ,arg))
|
74
78
|
|
75
|
-
(def caris (obj things)
|
76
|
-
; returns true if 'things is a list and the first item of the
|
77
|
-
; list is the given object
|
78
|
-
(and (isa 'pair things)
|
79
|
-
(eq? (car things) obj)))
|
80
|
-
|
81
79
|
(def list-length (things)
|
82
80
|
(if (no things) 0
|
83
81
|
(atom? things) 1
|
@@ -14,3 +14,25 @@
|
|
14
14
|
(apply joinlists
|
15
15
|
(map λx(hash-get tmp x)
|
16
16
|
(sort:hash-keys tmp)))))
|
17
|
+
|
18
|
+
(def mapsum (f things)
|
19
|
+
; map 'f over 'things and sum the resulting list
|
20
|
+
(apply + 0.0 (map f things)))
|
21
|
+
|
22
|
+
(def hash-values (h)
|
23
|
+
; return values for each key in hash 'h
|
24
|
+
(map (fn (k) h.,k) (hash-keys h)))
|
25
|
+
|
26
|
+
(def seen? ()
|
27
|
+
; returns a new function f which takes a parameter x
|
28
|
+
; for each call to f with any value Z for x
|
29
|
+
; f returns true if this f has previously seen Z
|
30
|
+
; f returns nil otherwise.
|
31
|
+
; Note that each call to 'seen? returns a new function with
|
32
|
+
; its own history independent of previous calls to 'seen?
|
33
|
+
(let seen (hash)
|
34
|
+
λx(returning seen.,x (= seen.,x t))))
|
35
|
+
|
36
|
+
(def uniqify (things)
|
37
|
+
; return a list containing all the elements of 'things, but with no duplicates
|
38
|
+
(reject (seen?) things))
|
@@ -49,7 +49,10 @@
|
|
49
49
|
|
50
50
|
("adds 1 float" (+ 4.2) 4.2)
|
51
51
|
("adds 2 floats" (+ 4.2 4.5) 8.7)
|
52
|
-
("adds 3 floats" (+ 1.1 2.2 3.3) 6.6)
|
52
|
+
("adds 3 floats" (+ 1.1 2.2 3.3) 6.6)
|
53
|
+
|
54
|
+
("adds days" (let d (date 2015 11 8) (to-string (+ d 1))) "2015-11-09")
|
55
|
+
("adds more days" (let d (date 2015 11 8) (to-string (+ d 10))) "2015-11-18"))
|
53
56
|
|
54
57
|
(examples-for -
|
55
58
|
("subtracts nothing" (-) 0)
|
@@ -59,7 +62,13 @@
|
|
59
62
|
|
60
63
|
("subtracts 1 float" (- 4.2) -4.2)
|
61
64
|
("subtracts 2 floats" (- 4.2 4.7) -0.5)
|
62
|
-
("subtracts 3 floats" (- 6.6 1.1 3.3) 2.2)
|
65
|
+
("subtracts 3 floats" (- 6.6 1.1 3.3) 2.2)
|
66
|
+
|
67
|
+
("subtracts a day" (let d (date 2015 11 18) (to-string (- d 1))) "2015-11-17")
|
68
|
+
("subtracts more days" (let d (date 2015 11 18) (to-string (- d 5))) "2015-11-13")
|
69
|
+
|
70
|
+
("subtracts two dates" (- (date 2015 11 18) (date 2015 11 2)) 16)
|
71
|
+
("subtracts two dates" (- (date 2015 11 18) (date 2015 12 25)) -37))
|
63
72
|
|
64
73
|
(examples-for *
|
65
74
|
("multiplies nothing" (*) 1)
|
@@ -26,3 +26,36 @@
|
|
26
26
|
(collect (fn (x) (eq? (len x) 20))
|
27
27
|
"zz")
|
28
28
|
nil))
|
29
|
+
|
30
|
+
(examples-for reject
|
31
|
+
("returns all non-matching items in a list"
|
32
|
+
(reject (fn (x) (eq? (len x) 2))
|
33
|
+
(list "foo" "bar" "xx" "pp"))
|
34
|
+
("foo" "bar"))
|
35
|
+
|
36
|
+
("returns everything when nothing matches"
|
37
|
+
(reject (fn (x) (eq? (len x) 20))
|
38
|
+
(list "foo" "bar" "xx" "pp"))
|
39
|
+
("foo" "bar" "xx" "pp"))
|
40
|
+
|
41
|
+
;; kind of pointless
|
42
|
+
("returns non-nils in list if nil is the matching item"
|
43
|
+
(reject no (list "foo" "bar" nil "pp" nil))
|
44
|
+
("foo" "bar" "pp"))
|
45
|
+
|
46
|
+
("returns item if it's an atom and doesn't match"
|
47
|
+
(reject (fn (x) (eq? (len x) 3)) "zz")
|
48
|
+
"zz")
|
49
|
+
|
50
|
+
("preserves structure of improper list"
|
51
|
+
(reject (fn (x) (eq? (len x) 2)) '("aa" "bbb" "cc" "ddd" . "eee"))
|
52
|
+
("bbb" "ddd" . "eee"))
|
53
|
+
|
54
|
+
("ignores last-cons if matching"
|
55
|
+
(reject (fn (x) (eq? (len x) 2)) '("aa" "bbb" "cc" "ddd" . "ee"))
|
56
|
+
("bbb" "ddd"))
|
57
|
+
|
58
|
+
("returns thing if it's an atom and doesn't match"
|
59
|
+
(reject (fn (x) (eq? (len x) 20))
|
60
|
+
"zz")
|
61
|
+
"zz"))
|
@@ -36,4 +36,8 @@
|
|
36
36
|
("recognises friday" (let d (date 2015 11 6) d.friday? ) t )
|
37
37
|
("recognises not friday" (let d (date 2015 11 7) d.friday? ) nil )
|
38
38
|
("recognises saturday" (let d (date 2015 11 7) d.saturday? ) t )
|
39
|
-
("recognises sunday" (let d (date 2015 11 8) d.sunday? ) t )
|
39
|
+
("recognises sunday" (let d (date 2015 11 8) d.sunday? ) t )
|
40
|
+
("adds days" (let d (date 2015 11 8) (to-string (+ d 1))) "2015-11-09")
|
41
|
+
("adds more days" (let d (date 2015 11 8) (to-string (+ d 10))) "2015-11-18")
|
42
|
+
("subtracts a day" (let d (date 2015 11 18) (to-string (- d 1))) "2015-11-17")
|
43
|
+
("subtracts more days" (let d (date 2015 11 18) (to-string (- d 5))) "2015-11-13"))
|
@@ -18,3 +18,26 @@
|
|
18
18
|
("nil for 42 in list not containing 42"
|
19
19
|
(include? 42 '(1 2 nil 3 (a b c) 4))
|
20
20
|
nil))
|
21
|
+
|
22
|
+
(examples-for seen?
|
23
|
+
("returns a function which returns t for every previously-seen argument, nil otherwise"
|
24
|
+
(map (seen?) '(a b c d a a e f b b g h c c i j d d k l a b c d))
|
25
|
+
(nil nil nil nil t t nil nil t t nil nil t t nil nil t t nil nil t t t t))
|
26
|
+
|
27
|
+
("each 'seen? is independent"
|
28
|
+
(with (s1 (seen?) s2 (seen?) syms '(a b c a d b e c f))
|
29
|
+
(list (map s1 syms) (map s2 syms)))
|
30
|
+
((nil nil nil t nil t nil t nil)
|
31
|
+
(nil nil nil t nil t nil t nil))))
|
32
|
+
|
33
|
+
(examples-for uniqify
|
34
|
+
("returns a list with duplicates removed"
|
35
|
+
(uniqify '(a b c d a a e f b b g h c c i j d d k l a b c d))
|
36
|
+
(a b c d e f g h i j k l))
|
37
|
+
|
38
|
+
("removes duplicate dates"
|
39
|
+
(let d (date 2004 3 12)
|
40
|
+
(joinstr " "
|
41
|
+
(uniqify (map λx(+ d x)
|
42
|
+
'(0 2 3 3 4 3 5 0 5) ))))
|
43
|
+
"2004-03-12 2004-03-14 2004-03-15 2004-03-16 2004-03-17"))
|
data/lib/nydp/date.rb
CHANGED
@@ -24,7 +24,6 @@ module Nydp
|
|
24
24
|
def to_ruby ; ruby_date ; end
|
25
25
|
def inspect ; ruby_date.inspect ; end
|
26
26
|
def nydp_type ; :date ; end
|
27
|
-
def - other ; r2n(ruby_date - other.ruby_date, nil) ; end
|
28
27
|
def + int ; r2n(ruby_date + int , nil) ; end
|
29
28
|
def > other ; ruby_date > other.ruby_date ; end
|
30
29
|
def < other ; ruby_date < other.ruby_date ; end
|
@@ -33,6 +32,14 @@ module Nydp
|
|
33
32
|
def eql? d ; self == d ; end
|
34
33
|
def hash ; ruby_date.hash ; end
|
35
34
|
|
35
|
+
def - other
|
36
|
+
if other.is_a? Nydp::Date
|
37
|
+
r2n(ruby_date - other.ruby_date, nil)
|
38
|
+
else
|
39
|
+
r2n(ruby_date - other, nil)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
36
43
|
@@pass_through = %i{ monday? tuesday? wednesday? thursday? friday? saturday? sunday? }
|
37
44
|
@@keys = Set.new %i{
|
38
45
|
year month week_day day
|
data/lib/nydp/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nydp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Conan Dalton
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-01-
|
11
|
+
date: 2016-01-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -123,11 +123,13 @@ files:
|
|
123
123
|
- lib/lisp/tests/isa-examples.nydp
|
124
124
|
- lib/lisp/tests/len-examples.nydp
|
125
125
|
- lib/lisp/tests/list-tests.nydp
|
126
|
+
- lib/lisp/tests/mapsum-examples.nydp
|
126
127
|
- lib/lisp/tests/parser-tests.nydp
|
127
128
|
- lib/lisp/tests/pre-compile-examples.nydp
|
128
129
|
- lib/lisp/tests/pretty-print-tests.nydp
|
129
130
|
- lib/lisp/tests/quasiquote-examples.nydp
|
130
131
|
- lib/lisp/tests/range-examples.nydp
|
132
|
+
- lib/lisp/tests/returning-examples.nydp
|
131
133
|
- lib/lisp/tests/rfnwith-tests.nydp
|
132
134
|
- lib/lisp/tests/sort-examples.nydp
|
133
135
|
- lib/lisp/tests/string-tests.nydp
|