nydp 0.1.6 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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