p-lang 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []