nydp 0.1.7.1 → 0.1.8
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-000.nydp +9 -6
- data/lib/lisp/core-030-syntax.nydp +0 -2
- data/lib/lisp/core-040-utils.nydp +35 -3
- data/lib/lisp/core-080-pretty-print.nydp +1 -1
- data/lib/lisp/tests/empty-examples.nydp +31 -0
- data/lib/lisp/tests/hash-examples.nydp +7 -0
- data/lib/lisp/tests/len-examples.nydp +12 -8
- data/lib/lisp/tests/list-tests.nydp +7 -0
- data/lib/lisp/tests/string-tests.nydp +9 -1
- data/lib/nydp/builtin/cons.rb +0 -10
- data/lib/nydp/builtin/string_split.rb +1 -1
- data/lib/nydp/core.rb +0 -1
- data/lib/nydp/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 464c1f232ccc2d83cad5b5141745c64b46f44456
|
4
|
+
data.tar.gz: 6197cc9ee681187c2bd2ace20395f1c2a414df1f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9b1e87a79e8531565cedd6f9eaebd3bf1af59782ea383e3426ee054ae9c2c819881dde4123620f683690cbbbef164b1477df93a323de8dac817d39355aaeccf7
|
7
|
+
data.tar.gz: 9d9a93990ebcd01d4305ef2458b02acfbf338263f3ee5ba4ab0f223f1115db845cc91220e410cf1bbb535a84c59f3eea66e8f8856e04d0919d9afb4ada53893a
|
data/lib/lisp/core-000.nydp
CHANGED
@@ -2,17 +2,20 @@
|
|
2
2
|
;;
|
3
3
|
;; Acknowledgements to Paul Graham, Robert Morris, and their ancestor programmers.
|
4
4
|
;; nydp's main inspiration is arc, and many nydp features (including, but not limited
|
5
|
-
;; to, 'do, 'rfn, 'loop, 'for) were directly inspired by (aka stolen from) arc.arc
|
6
|
-
;;
|
5
|
+
;; to, 'do, 'rfn, 'loop, 'for) were directly inspired by (aka stolen from) arc.arc. See
|
6
|
+
;; README.md however for some significant differences
|
7
7
|
|
8
8
|
(assign list (fn args args))
|
9
9
|
(assign caar (fn (arg) (car (car arg))))
|
10
10
|
(assign cadr (fn (arg) (car (cdr arg))))
|
11
11
|
(assign cdar (fn (arg) (cdr (car arg))))
|
12
12
|
(assign cddr (fn (arg) (cdr (cdr arg))))
|
13
|
-
(assign cadar (fn (arg) (car (
|
14
|
-
(assign caddr (fn (arg) (car (
|
15
|
-
(assign cdddr (fn (arg) (cdr (
|
16
|
-
(assign cadddr (fn (arg) (car (
|
13
|
+
(assign cadar (fn (arg) (car (cdar arg))))
|
14
|
+
(assign caddr (fn (arg) (car (cddr arg))))
|
15
|
+
(assign cdddr (fn (arg) (cdr (cddr arg))))
|
16
|
+
(assign cadddr (fn (arg) (car (cdddr arg))))
|
17
17
|
(assign no (fn (arg) (cond arg nil t)))
|
18
18
|
(assign just (fn (arg) arg))
|
19
|
+
(assign isa (fn (type obj) (eq? (type-of obj) type)))
|
20
|
+
(assign pair? (fn (arg) (isa 'pair arg)))
|
21
|
+
(assign hash? (fn (arg) (isa 'hash arg)))
|
@@ -78,10 +78,17 @@
|
|
78
78
|
(and (isa 'pair things)
|
79
79
|
(eq? (car things) obj)))
|
80
80
|
|
81
|
+
(def list-length (things)
|
82
|
+
(if (no things) 0
|
83
|
+
(atom? things) 1
|
84
|
+
(+ 1 (list-length:cdr things))))
|
85
|
+
|
81
86
|
(def len (xs)
|
82
|
-
(if (
|
87
|
+
(if (no xs) 0
|
88
|
+
(pair? xs) (list-length xs)
|
83
89
|
(string? xs) (string-length xs)
|
84
|
-
|
90
|
+
(hash? xs) (list-length:hash-keys xs)
|
91
|
+
nil))
|
85
92
|
|
86
93
|
(assign dynamics (hash))
|
87
94
|
|
@@ -112,7 +119,18 @@
|
|
112
119
|
`(ensuring (fn () ,protection)
|
113
120
|
(fn () ,@body)))
|
114
121
|
|
122
|
+
(mac while (test . body)
|
123
|
+
; tests 'test, as long as 'test is non-nil,
|
124
|
+
; repeatedly executes 'body
|
125
|
+
(w/uniq (rfname pred)
|
126
|
+
`(rfnwith ,rfname (,pred ,test)
|
127
|
+
(when ,pred
|
128
|
+
,@body
|
129
|
+
(,rfname ,test)))))
|
130
|
+
|
115
131
|
(mac loop (start test update . body)
|
132
|
+
; execute 'start. then for as long as 'test returns non-nil,
|
133
|
+
; execute 'body and 'update
|
116
134
|
(w/uniq (gfn gparm)
|
117
135
|
`(do ,start
|
118
136
|
((rfn ,gfn (,gparm)
|
@@ -129,7 +147,21 @@
|
|
129
147
|
(mac mapx (things x expr)
|
130
148
|
`(map (fn (,x) ,expr) ,things))
|
131
149
|
|
132
|
-
(def
|
150
|
+
(def atom? (thing)
|
151
|
+
(and thing
|
152
|
+
(!pair? thing)
|
153
|
+
(!hash? thing)))
|
154
|
+
|
155
|
+
(def empty? (things)
|
156
|
+
; t if it's nil or an empty list, string, or hash
|
157
|
+
; nil otherwise
|
158
|
+
(let l (len things)
|
159
|
+
(and l (eq? l 0))))
|
160
|
+
|
161
|
+
(def present? (thing)
|
162
|
+
; t if it's a symbol or number, or a non-empty string, list or hash
|
163
|
+
; nil otherwise
|
164
|
+
(!empty? thing))
|
133
165
|
|
134
166
|
(mac each (var things code)
|
135
167
|
; repeatedly assigns an element of 'things to 'var,
|
@@ -75,7 +75,7 @@
|
|
75
75
|
|
76
76
|
(def pp/find-breaks/mac (form)
|
77
77
|
(if (eq? (dox-what-is? (car form)) 'mac)
|
78
|
-
(let arg-count (
|
78
|
+
(let arg-count (list-length:dox-arg-names:car form)
|
79
79
|
(cons (firstn arg-count form)
|
80
80
|
(map list (nthcdr arg-count form))))))
|
81
81
|
|
@@ -0,0 +1,31 @@
|
|
1
|
+
(examples-for empty?
|
2
|
+
("nonzero" (empty? "foo-bar") nil)
|
3
|
+
("zero" (empty? "") t)
|
4
|
+
("blank" (empty? " ") nil)
|
5
|
+
("nil is t" (empty? nil) t)
|
6
|
+
("sym is nil" (empty? 'abc) nil)
|
7
|
+
("number is nil" (empty? 234) nil)
|
8
|
+
|
9
|
+
("nil for proper list" (empty? '(a b)) nil)
|
10
|
+
("nil for improper list" (empty? '(a b c . d)) nil)
|
11
|
+
("t for empty hash" (empty? { }) t)
|
12
|
+
|
13
|
+
("nil for hash with keys"
|
14
|
+
(empty? { a 11 b 22 c 23 d nil e { nested t counted nil } })
|
15
|
+
nil))
|
16
|
+
|
17
|
+
(examples-for present?
|
18
|
+
("nonzero" (present? "foo-bar") t)
|
19
|
+
("zero" (present? "") nil)
|
20
|
+
("blank" (present? " ") t)
|
21
|
+
("nil is t" (present? nil) nil)
|
22
|
+
("sym is t" (present? 'abc) t)
|
23
|
+
("number is t" (present? 234) t)
|
24
|
+
|
25
|
+
("t for proper list" (present? '(a b)) t)
|
26
|
+
("t for improper list" (present? '(a b c . d)) t)
|
27
|
+
("nil for empty hash" (present? { }) nil)
|
28
|
+
|
29
|
+
("t for hash with keys"
|
30
|
+
(present? { a 11 b 22 c 23 d nil e { nested t counted nil } })
|
31
|
+
t))
|
@@ -1,3 +1,10 @@
|
|
1
|
+
(examples-for hash?
|
2
|
+
("nil for a cons" (hash? '(1 a 2 b 3 c)) nil)
|
3
|
+
("nil for a number" (hash? 1) nil)
|
4
|
+
("nil for a string" (hash? "werwe") nil)
|
5
|
+
(" t for a hash" (hash? {a 1 b 2}) t )
|
6
|
+
("nil for a symbol" (hash? 'foo) nil))
|
7
|
+
|
1
8
|
(examples-for hash-merge
|
2
9
|
("merge with symbol keys"
|
3
10
|
(let h (hash-merge { a 1 b 2 c 3 } { a 99 c 98 d 97 })
|
@@ -1,11 +1,15 @@
|
|
1
1
|
(examples-for len
|
2
|
-
("nonzero"
|
3
|
-
("zero"
|
2
|
+
("nonzero" (len "foo-bar") 7)
|
3
|
+
("zero" (len "") 0)
|
4
|
+
("nil is zero" (len nil) 0)
|
5
|
+
("sym is nil" (len 'abc) nil)
|
6
|
+
("number is nil" (len 234) nil)
|
4
7
|
|
5
|
-
("ignores backslash-escaped interpolation symbol"
|
6
|
-
|
7
|
-
|
8
|
+
("ignores backslash-escaped interpolation symbol" (len "hello \~world") 12)
|
9
|
+
("returns length of proper list" (len '(a b)) 2)
|
10
|
+
("counts last item of improper list" (len '(a b c . d)) 4)
|
11
|
+
("counts keys of empty hash" (len { }) 0)
|
8
12
|
|
9
|
-
("
|
10
|
-
(len
|
11
|
-
|
13
|
+
("counts keys of hash"
|
14
|
+
(len { a 11 b 22 c 23 d nil e { nested t counted nil } })
|
15
|
+
5))
|
@@ -1,3 +1,10 @@
|
|
1
|
+
(examples-for pair?
|
2
|
+
(" t for a cons" (pair? '(1 a 2 b 3 c)) t)
|
3
|
+
("nil for a number" (pair? 1) nil)
|
4
|
+
("nil for a string" (pair? "werwe") nil)
|
5
|
+
("nil for a hash" (pair? {a 1 b 2}) nil)
|
6
|
+
("nil for a symbol" (pair? 'foo) nil))
|
7
|
+
|
1
8
|
(examples-for pairs
|
2
9
|
("'pair breaks a list into pairs"
|
3
10
|
(pairs '(1 a 2 b 3 c))
|
@@ -1,7 +1,15 @@
|
|
1
1
|
(examples-for string-split
|
2
2
|
("splits a string using given expression"
|
3
3
|
(string-split "a and b and c and d" " and ")
|
4
|
-
("a" "b" "c" "d"))
|
4
|
+
("a" "b" "c" "d"))
|
5
|
+
|
6
|
+
("returns empty leading, internal, and trailing segments"
|
7
|
+
(string-split "and" "and")
|
8
|
+
("" ""))
|
9
|
+
|
10
|
+
("returns empty leading, internal, and trailing segments"
|
11
|
+
(string-split "andandand" "and")
|
12
|
+
("" "" "" "")))
|
5
13
|
|
6
14
|
(examples-for string-replace
|
7
15
|
("replaces parts of a string with the given replacement"
|
data/lib/nydp/builtin/cons.rb
CHANGED
@@ -6,14 +6,4 @@ module Nydp::Builtin
|
|
6
6
|
vm.push_arg Nydp::Pair.new(args.car, args.cdr.car)
|
7
7
|
end
|
8
8
|
end
|
9
|
-
|
10
|
-
class IsPair
|
11
|
-
include Nydp::Helper, Nydp::Builtin::Base
|
12
|
-
|
13
|
-
def builtin_invoke vm, args
|
14
|
-
arg = args.car
|
15
|
-
result = pair?(arg) ? Nydp.T : Nydp.NIL
|
16
|
-
vm.push_arg result
|
17
|
-
end
|
18
|
-
end
|
19
9
|
end
|
@@ -4,7 +4,7 @@ class Nydp::Builtin::StringSplit
|
|
4
4
|
def builtin_invoke vm, args
|
5
5
|
target = args.car.to_s
|
6
6
|
separator = args.cdr.car.to_s
|
7
|
-
result = target.split separator
|
7
|
+
result = target.split separator, -1
|
8
8
|
list = result.map { |s| Nydp::StringAtom.new s }
|
9
9
|
|
10
10
|
vm.push_arg Nydp::Pair.from_list list
|
data/lib/nydp/core.rb
CHANGED
@@ -60,7 +60,6 @@ module Nydp
|
|
60
60
|
Symbol.mk("thread-locals" , ns).assign(Nydp::Builtin::ThreadLocals.new)
|
61
61
|
Symbol.mk("type-of", ns).assign(Nydp::Builtin::TypeOf.new(ns))
|
62
62
|
Symbol.mk(:"eq?", ns).assign(Nydp::Builtin::IsEqual.new)
|
63
|
-
Symbol.mk(:"pair?", ns).assign(Nydp::Builtin::IsPair.new)
|
64
63
|
Symbol.mk(:"cdr-set", ns).assign(Nydp::Builtin::CdrSet.new)
|
65
64
|
Symbol.mk(:"hash-get", ns).assign(Nydp::Builtin::HashGet.new ns)
|
66
65
|
Symbol.mk(:"hash-set", ns).assign(Nydp::Builtin::HashSet.new)
|
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.8
|
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-
|
11
|
+
date: 2015-11-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -112,6 +112,7 @@ files:
|
|
112
112
|
- lib/lisp/tests/dox-tests.nydp
|
113
113
|
- lib/lisp/tests/dynamic-scope-test.nydp
|
114
114
|
- lib/lisp/tests/each-tests.nydp
|
115
|
+
- lib/lisp/tests/empty-examples.nydp
|
115
116
|
- lib/lisp/tests/error-tests.nydp
|
116
117
|
- lib/lisp/tests/explain-mac-examples.nydp
|
117
118
|
- lib/lisp/tests/foundation-test.nydp
|