p-lang 0.3.0 → 0.3.1

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.
@@ -1,5 +1,5 @@
1
1
  ---
2
2
  :major: 0
3
3
  :minor: 3
4
- :patch: 0
4
+ :patch: 1
5
5
  :build:
@@ -0,0 +1,2 @@
1
+ {a: {list}, x} = {a: '(), 1}
2
+ print(x)
@@ -32,7 +32,10 @@ module PLang
32
32
  v = get_var(id)
33
33
  if v
34
34
  if v.id == :lambda and lamb.id == :lambda
35
- v.params |= lamb.params
35
+ while v.params[1].id == :lambda
36
+ v = v.params[1]
37
+ end
38
+ v.params[1] = lamb
36
39
  else
37
40
  raise "TODO: Environment#add_lambda#2"
38
41
  end
@@ -131,7 +131,9 @@ module PLang
131
131
  end
132
132
  end
133
133
  if next_lambda
134
- lambda |= execute(next_lambda, env).params
134
+ lambda << execute(next_lambda, env)
135
+ else
136
+ lambda << PObject.new(:empty, [])
135
137
  end
136
138
  PObject.new(:lambda, lambda)
137
139
  end
@@ -142,8 +144,15 @@ module PLang
142
144
  values << execute(param, env)
143
145
  end
144
146
  lambda = execute(lambda, env)
145
- lambda.params.each do |lamb|
146
- return lamb.call(values) if lamb.call?(values)
147
+ #lambda.params.each do |lamb|
148
+ # return lamb.call(values) if lamb.call?(values)
149
+ #end
150
+ while lambda.id == :lambda
151
+ if lambda.params[0].call?(values)
152
+ return lambda.params[0].call(values)
153
+ else
154
+ lambda = lambda.params[1]
155
+ end
147
156
  end
148
157
  raise "CallError"
149
158
  end
@@ -40,7 +40,7 @@ module PLang
40
40
  obj_params << param
41
41
  end
42
42
 
43
- PObject.new(:lambda, [lamb])
43
+ PObject.new(:lambda, [lamb, PObject.new(:empty, [])])
44
44
  end
45
45
 
46
46
  def object(expr)
@@ -27,3 +27,6 @@ x = '(1,2,3,4) x->concat(10)->tail()->head()
27
27
  sum = [{empty}| 0]; [x| x->head() + sum(x->tail())] x = '(1,2,3,4) sum(x)
28
28
  if(2>=2, 1, 2)
29
29
  if(2<2, 1, 2)
30
+ {a: {empty}, x} = {a: '(), 1} x
31
+ {lambda: f, fs} -> one = [1] print->one()
32
+ {lambda: f, fs} -> add_one = [x|1+x] print->add_one(3)
@@ -27,3 +27,6 @@
27
27
  10
28
28
  1
29
29
  2
30
+ 1
31
+ 1
32
+ 4
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: p-lang
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 0
10
- version: 0.3.0
9
+ - 1
10
+ version: 0.3.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Igor Bonadio
@@ -15,8 +15,8 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-07-31 00:00:00 -03:00
19
- default_executable: p-lang
18
+ date: 2010-10-01 00:00:00 -03:00
19
+ default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  name: shoulda
@@ -36,6 +36,7 @@ description: P is a small ('pequena' in portuguese) functional programming langu
36
36
  email: igorbonadio@gmail.com
37
37
  executables:
38
38
  - p-lang
39
+ - teste.p
39
40
  extensions: []
40
41
 
41
42
  extra_rdoc_files:
@@ -79,6 +80,7 @@ files:
79
80
  - test/test_vm
80
81
  - test/test_vm.rb
81
82
  - test/test_vm_result
83
+ - bin/teste.p
82
84
  has_rdoc: true
83
85
  homepage: http://github.com/igorbonadio/p-lang
84
86
  licenses: []