missinglisp 0.0.1 → 0.0.2

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/missinglisp.rb +34 -1
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2d943518d524706f9cac981ad41c1cb031a87016e286c12804d424af0528c121
4
- data.tar.gz: bbc3ce8ab2de2fa384444a4b00c1cb3fbe1ea16fbc37470a56cf0e0828746134
3
+ metadata.gz: 3d439126ef5936974b06ea17de05495349e19c0a11118edc19092e873a736436
4
+ data.tar.gz: f132a6e170876980329bd8b84d20aa1bd7e06f100bf3872b0c0e763535b30505
5
5
  SHA512:
6
- metadata.gz: 7f1ab35b50356a81b4a146424a254eec5d9bf0e54ed3d7641ca38d25bacc5e96e75d0ac0522e5a91d013745c242118c28d0ea8922bcd037f210b499d1996b98d
7
- data.tar.gz: 474e2c0137ebcab5b129088d9c4cdeaa06abf47f1f17ad173deccb4e86c800956f73f513d2df8b8a41cf7d5ebaf125a0421d54e15fafe1f87a0dd032a0691ccf
6
+ metadata.gz: 84dc4fadf2b03da0d3c6e155b8eacc056bd6565438a4dd08d32bfbdcb4197727ac3000317f8f0b612808af346fd77771385c7731be852a06af7de72f8fe170cb
7
+ data.tar.gz: 9995f555865a9813a2505c79f2abd9f6823fda4b81311ed312f314f3537f0020d2fe8162067b9bc3740726abc86c4753f02d7544ca990ef066a9584f7e2ca5c0
data/lib/missinglisp.rb CHANGED
@@ -16,7 +16,18 @@ class Lisp
16
16
  gt: ->(a, b, *) { a > b },
17
17
  geq: ->(a, b, *) { a >= b },
18
18
 
19
+ # string
20
+ aref: ->(s, at, *) { s[at] },
21
+ concatenate: ->(_type, *ls) { ls.reduce(:+) },
22
+
23
+ # char
24
+ codeChar: ->(c, *) { c.chr },
25
+
26
+ readLine: ->(*) { $stdin.readline.chomp },
27
+
19
28
  p: ->(*ls) { p ls },
29
+ print: ->(*ls) { p ls },
30
+ writeLine: ->(s, *) { puts s },
20
31
 
21
32
  t: true,
22
33
  nil: []
@@ -25,6 +36,7 @@ class Lisp
25
36
 
26
37
  def eval(exp, env)
27
38
  return exp if exp.is_a? Numeric
39
+ return exp if exp.is_a? String
28
40
  return env[exp] if exp.is_a? Symbol
29
41
 
30
42
  # list
@@ -64,7 +76,6 @@ class Lisp
64
76
 
65
77
  res = nil
66
78
  exp.each do |stmt|
67
- # p stmt
68
79
  res = self.eval(stmt, env)
69
80
  end
70
81
 
@@ -113,9 +124,12 @@ class Lisp
113
124
  res = []
114
125
  cur = ''
115
126
  is_reading_digit = false
127
+ is_reading_string = false
116
128
  s.each_char do |c|
117
129
  case c
118
130
  when '_'
131
+ cur += ' ' and next if is_reading_string
132
+
119
133
  if cur != ''
120
134
  if is_reading_digit
121
135
  res.push cur.to_i
@@ -154,6 +168,25 @@ class Lisp
154
168
  end
155
169
 
156
170
  res.push :J
171
+ when 'Q'
172
+ if is_reading_string
173
+ res.push cur
174
+ cur = ''
175
+ is_reading_string = false
176
+ next
177
+ elsif is_reading_digit
178
+ res.push cur.to_i
179
+ cur = ''
180
+ is_reading_digit = false
181
+ is_reading_string = true
182
+ next
183
+ end
184
+
185
+ if cur != ''
186
+ cur += 'Q'
187
+ else
188
+ is_reading_string = true
189
+ end
157
190
  when '0'..'9'
158
191
  cur += c and next if cur != ''
159
192
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: missinglisp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yajima Soichi