nydp 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f2bdfc7b6cc359ea91871fc6ea2d46d454398e72
4
- data.tar.gz: 8016a1174d6bbae50cded7bf9988ca50c5aefed9
3
+ metadata.gz: c06a0264cdd46d00dc6380d8e864fa5471742b9c
4
+ data.tar.gz: e154d0f6bf4bfdc48eb86daa8b28d41568683e6a
5
5
  SHA512:
6
- metadata.gz: 3f85114925c5bcdda72ae5f76db10229527a9e30ec8b96ce71b39dbf24138e1dc5f8544652556ae3c6ae6344c7fa54310e073c9f10a4c94c261521c43149b23d
7
- data.tar.gz: b771be6e0e3be575c490179144b0db49983361a80687f374fa2e00805a263070789fdfdec829077d3c8831e634f7e7f1a050e7c9b0aab67db6d6c4579984ccf4
6
+ metadata.gz: 695695ea3b5c9d70a13eec9d907d81b0b7e8f1fefe7d5a7f6d5e1e4b81c6e68b05ba938e7a1c5a6ed15ddb05b837a069e44b4f5c19fdbbad05541d3404f11856
7
+ data.tar.gz: b01929361f8ee8f8c19e00d6fcac70164b6e584b2f4ea890ae5b643ca03a3fda6a972ecb50cecdb34964ad5995ddb854e80c6c396e876b3027b0511bf52e065b
@@ -38,18 +38,6 @@
38
38
  (def string-pieces pieces
39
39
  (joinstr "" pieces))
40
40
 
41
- (def detect (f things)
42
- ; if 'things is a list, return the first item in the list for which 'f returns non-nil
43
- ; otherwise, return 'things if (f things) is non-nil
44
- ; otherwise, nil
45
- (if (pair? things)
46
- (let it (car things)
47
- (or
48
- (and (f it) it)
49
- (detect f (cdr things))))
50
- (f things)
51
- things))
52
-
53
41
  (def collect (f things)
54
42
  ; if 'things is a list, return all the items in the list for which 'f returns non-nil
55
43
  ; otherwise, return 'things if (f things) is non-nil
@@ -200,8 +188,33 @@
200
188
  ; the given args1 already applied
201
189
  ; arguments to the new function are whatever arguments remain
202
190
  ; for the old function
203
- (fn args2
204
- (apply func (joinlists args1 args2))))
191
+ (fn args
192
+ (apply func
193
+ (joinlists args1
194
+ args))))
195
+
196
+ (def detect (f things)
197
+ ; if 'f is a function,
198
+ ; if 'things is a list, return the first item in the list for which 'f returns non-nil
199
+ ; otherwise, return 'things if (f things) is non-nil
200
+ ; otherwise, nil
201
+ ; if 'f is not a function, self-invoke with a function checking for equality with f
202
+ ;
203
+ ; WARNING: if the detected thing is nil, returns t instead. A return value of nil
204
+ ; means the thing was not found ; non-nil means the thing was found, including when
205
+ ; the found thing is itself nil.
206
+ (if (isa 'fn f)
207
+ (rfnwith d (items things)
208
+ (if (pair? items)
209
+ (let it (car items)
210
+ (or
211
+ (and (f it)
212
+ (or it t))
213
+ (d:cdr items)))
214
+ (f items)
215
+ items))
216
+ (detect (curry eq? f)
217
+ things)))
205
218
 
206
219
  (def tuples (n things)
207
220
  ;; split things into a list of lists each n long
@@ -0,0 +1,4 @@
1
+ (def include? (thing things)
2
+ ; alias for 'detect
3
+ ; true if thing is in things, nil otherwise
4
+ (detect thing things))
@@ -1,20 +1,22 @@
1
1
  (examples-for date
2
- ("creates a single date" (to-string (date 1965 6 8)) "1965-06-08" )
3
- ("navigates to next day" (let d (date 2004 3 11) (to-string d.tomorrow)) "2004-03-12" )
4
- ("navigates to previous day" (let d (date 2006 6 22) (to-string d.yesterday)) "2006-06-21" )
5
- ("navigates to previous year" (let d (date 1971 12 18) (to-string d.last-year)) "1970-12-18" )
6
- ("navigates to next year" (let d (date 1974 1 11) (to-string d.next-year)) "1975-01-11" )
7
- ("navigates to previous month" (let d (date 1971 12 18) (to-string d.last-month)) "1971-11-18" )
8
- ("navigates to next month" (let d (date 1974 1 11) (to-string d.next-month)) "1974-02-11" )
9
- ("jumps a year to previous month" (let d (date 1974 1 11) (to-string d.last-month)) "1973-12-11" )
10
- ("navigates to previous week" (let d (date 2008 2 16) (to-string d.last-week)) "2008-02-09" )
11
- ("navigates to next week" (let d (date 1972 11 13) (to-string d.next-week)) "1972-11-20" )
12
- ("navigates to year start" (let d (date 1972 11 13) (to-string d.beginning-of-year)) "1972-01-01" )
13
- ("navigates to year end" (let d (date 1972 11 13) (to-string d.end-of-year)) "1972-12-31" )
14
- ("navigates to month start" (let d (date 1971 11 18) (to-string d.beginning-of-month)) "1971-11-01" )
15
- ("navigates to month end" (let d (date 1971 11 18) (to-string d.end-of-month)) "1971-11-30" )
16
- ("navigates to week start" (let d (date 2015 11 6) (to-string d.beginning-of-week)) "2015-11-02" )
17
- ("navigates to week end" (let d (date 2015 11 6) (to-string d.end-of-week)) "2015-11-08" )
2
+ ("creates a single date" (to-string (date 1965 6 8)) "1965-06-08" )
3
+ ("navigates to next day" (let d (date 2004 3 11) (to-string d.tomorrow)) "2004-03-12" )
4
+ ("navigates to previous day" (let d (date 2006 6 22) (to-string d.yesterday)) "2006-06-21" )
5
+ ("navigates to previous year" (let d (date 1971 12 18) (to-string d.last-year)) "1970-12-18" )
6
+ ("navigates to next year" (let d (date 1974 1 11) (to-string d.next-year)) "1975-01-11" )
7
+ ("navigates to previous month" (let d (date 1971 12 18) (to-string d.last-month)) "1971-11-18" )
8
+ ("navigates to next month" (let d (date 1974 1 11) (to-string d.next-month)) "1974-02-11" )
9
+ ("jumps a year to previous month" (let d (date 1974 1 11) (to-string d.last-month)) "1973-12-11" )
10
+ ("navigates to previous week" (let d (date 2008 2 16) (to-string d.last-week)) "2008-02-09" )
11
+ ("navigates to next week" (let d (date 1972 11 13) (to-string d.next-week)) "1972-11-20" )
12
+ ("navigates to year start" (let d (date 1972 11 13) (to-string d.beginning-of-year)) "1972-01-01" )
13
+ ("navigates to year end" (let d (date 1972 11 13) (to-string d.end-of-year)) "1972-12-31" )
14
+ ("navigates to month start" (let d (date 1971 11 18) (to-string d.beginning-of-month)) "1971-11-01" )
15
+ ("navigates to month end" (let d (date 1971 11 18) (to-string d.end-of-month)) "1971-11-30" )
16
+ ("navigates to week start" (let d (date 2015 11 6) (to-string d.beginning-of-week)) "2015-11-02" )
17
+ ("navigates to week start from sun" (let d (date 2015 11 1) (to-string d.beginning-of-week)) "2015-10-26" )
18
+ ("navigates to week end from sun" (let d (date 2015 11 1) (to-string d.end-of-week)) "2015-11-01" )
19
+ ("navigates to week end" (let d (date 2015 11 6) (to-string d.end-of-week)) "2015-11-08" )
18
20
 
19
21
  ("can act as hash key"
20
22
  (with (h {} d (date 2015 11 8))
@@ -9,10 +9,13 @@
9
9
  (list "foo" "bar" "xx" "pp"))
10
10
  nil)
11
11
 
12
- ;; kind of pointless
13
- ("returns nil if nil is the matching item"
12
+ ("returns t if nil is the matching item (warning: anomalous behaviour)"
14
13
  (detect no (list "foo" "bar" nil "pp"))
15
- nil)
14
+ t)
15
+
16
+ ("finds first non-nil item using x1"
17
+ (detect x1 (list nil nil "foo" "bar" nil "pp"))
18
+ "foo")
16
19
 
17
20
  ("returns item if it's an atom and matches"
18
21
  (detect (fn (x) (eq? (len x) 2)) "zz")
@@ -21,4 +24,24 @@
21
24
  ("returns nil if it's an atom and doesn't match"
22
25
  (detect (fn (x) (eq? (len x) 20))
23
26
  "zz")
27
+ nil)
28
+
29
+ ("nil for nil"
30
+ (detect nil nil)
31
+ nil)
32
+
33
+ ("true for nil in list containing nil"
34
+ (detect nil '(1 2 nil 3 4))
35
+ t)
36
+
37
+ ("nil for nil in list not containing nil"
38
+ (detect nil '(1 2 3 4 5))
39
+ nil)
40
+
41
+ ("true for 42 in list containing 42"
42
+ (detect 42 '(1 2 nil 3 42 4))
43
+ 42)
44
+
45
+ ("nil for 42 in list not containing 42"
46
+ (detect 42 '(1 2 nil 3 (a b c) 4))
24
47
  nil))
@@ -9,6 +9,44 @@
9
9
  (cons (hash-keys h) (mapx (hash-keys h) k h.,k)))
10
10
  ((a "b" 3 b) 99 2 "foo" 98)))
11
11
 
12
+ (examples-for hash-keys
13
+ ("returns nil for a number" (hash-keys 1) nil)
14
+ ("returns nil for nil" (hash-keys nil) nil)
15
+ ("returns nil for a string" (hash-keys "hello") nil)
16
+ ("returns nil for a symbol" (hash-keys 'lipstick) nil)
17
+
18
+ ("returns date operations"
19
+ (hash-keys (date 2015 11 18))
20
+ (beginning_of_month
21
+ beginning_of_week
22
+ beginning_of_year
23
+ day
24
+ end_of_month
25
+ end_of_week
26
+ end_of_year
27
+ friday?
28
+ last_month
29
+ last_week
30
+ last_year
31
+ monday?
32
+ month
33
+ next_month
34
+ next_week
35
+ next_year
36
+ saturday?
37
+ sunday?
38
+ thursday?
39
+ tomorrow
40
+ tuesday?
41
+ wednesday?
42
+ week_day
43
+ year
44
+ yesterday))
45
+
46
+ ("returns keys of a given hash"
47
+ (hash-keys {a 1 b 2 c { x 99 y 98 z 97 }})
48
+ (a b c)))
49
+
12
50
  (examples-for hash-key?
13
51
  ("detects key presence"
14
52
  (hash-key? { foo 1 bar 2 } 'foo)
@@ -0,0 +1,20 @@
1
+ (examples-for include?
2
+ ("nil for nil"
3
+ (include? nil nil)
4
+ nil)
5
+
6
+ ("true for nil in list containing nil"
7
+ (include? nil '(1 2 nil 3 4))
8
+ t)
9
+
10
+ ("nil for nil in list not containing nil"
11
+ (include? nil '(1 2 3 4 5))
12
+ nil)
13
+
14
+ ("true for 42 in list containing 42"
15
+ (include? 42 '(1 2 nil 3 42 4))
16
+ 42)
17
+
18
+ ("nil for 42 in list not containing 42"
19
+ (include? 42 '(1 2 nil 3 (a b c) 4))
20
+ nil))
@@ -65,11 +65,12 @@ class Nydp::Builtin::HashKeys
65
65
  def initialize ns ; @ns = ns; end
66
66
  def builtin_invoke vm, args
67
67
  hash = args.car
68
- case hash
69
- when Nydp::Hash
68
+ if hash.is_a? Nydp::Hash
70
69
  vm.push_arg Nydp::Pair.from_list hash.keys
70
+ elsif hash.respond_to?(:keys)
71
+ vm.push_arg r2n(hash.keys.to_a.sort, ns)
71
72
  else
72
- vm.push_arg r2n(hash.keys, ns)
73
+ vm.push_arg Nydp.NIL
73
74
  end
74
75
  end
75
76
  end
@@ -58,8 +58,8 @@ module Nydp
58
58
 
59
59
  def last_week y, m, d, w ; ruby_date - 7 ; end
60
60
  def next_week y, m, d, w ; ruby_date + 7 ; end
61
- def beginning_of_week y, m, d, w ; ruby_date + 1 - w ; end
62
- def end_of_week y, m, d, w ; ruby_date + 7 - w ; end
61
+ def beginning_of_week y, m, d, w ; ruby_date - ((w - 1) % 7) ; end
62
+ def end_of_week y, m, d, w ; ruby_date + ((7 - w) % 7) ; end
63
63
 
64
64
  def yesterday y, m, d, w ; ruby_date - 1 ; end
65
65
  def tomorrow y, m, d, w ; ruby_date + 1 ; end
@@ -68,7 +68,8 @@ module Nydp
68
68
  class_eval "def #{n} * ; ruby_date.#{n} ; end"
69
69
  end
70
70
 
71
- def dispatch key, y, m, d, w ; self.send(key, y, m, d, w) if @@keys.include?(key) ; end
71
+ def keys ; @@keys ; end
72
+ def dispatch key, y, m, d, w ; self.send(key, y, m, d, w) if keys.include?(key) ; end
72
73
 
73
74
  def [] key
74
75
  key = key.to_s.gsub(/-/, '_').to_sym
@@ -11,7 +11,7 @@ module Nydp
11
11
  def car ; self ; end
12
12
  def cdr ; self ; end
13
13
  def size ; 0 ; end
14
- def is? other ; (self.equal? other) ; end
14
+ def is? other ; other.class == self.class ; end
15
15
  def isnt? other ; !is?(other) ; end
16
16
  def to_s ; "" ; end
17
17
  def + other ; other ; end
@@ -1,3 +1,3 @@
1
1
  module Nydp
2
- VERSION = "0.1.6"
2
+ VERSION = "0.1.7"
3
3
  end
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.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Conan Dalton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-09 00:00:00.000000000 Z
11
+ date: 2015-11-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -96,6 +96,7 @@ files:
96
96
  - lib/lisp/core-070-prefix-list.nydp
97
97
  - lib/lisp/core-080-pretty-print.nydp
98
98
  - lib/lisp/core-090-hook.nydp
99
+ - lib/lisp/core-100-utils.nydp
99
100
  - lib/lisp/tests/add-hook-examples.nydp
100
101
  - lib/lisp/tests/best-examples.nydp
101
102
  - lib/lisp/tests/boot-tests.nydp
@@ -115,6 +116,7 @@ files:
115
116
  - lib/lisp/tests/explain-mac-examples.nydp
116
117
  - lib/lisp/tests/foundation-test.nydp
117
118
  - lib/lisp/tests/hash-examples.nydp
119
+ - lib/lisp/tests/include-examples.nydp
118
120
  - lib/lisp/tests/invocation-tests.nydp
119
121
  - lib/lisp/tests/isa-examples.nydp
120
122
  - lib/lisp/tests/len-examples.nydp