Make 'list' component easier to compose by using one reference per element in the list, instead of a 'cons'-like linked list construction pattern. Rename the original list component to 'cons'.
git-svn-id: https://svn.apache.org/repos/asf/incubator/nuvem/trunk@1078653 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/nuvem-parallel/nuvem/cons.py b/nuvem-parallel/nuvem/cons.py
new file mode 100644
index 0000000..660b1fc
--- /dev/null
+++ b/nuvem-parallel/nuvem/cons.py
@@ -0,0 +1,23 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+def get(r, first, rest):
+ rst = rest.get(r)
+ if rst is None:
+ return (first.get(r),)
+ return (first.get(r),) + rst
+
diff --git a/nuvem-parallel/nuvem/list_.py b/nuvem-parallel/nuvem/list_.py
index 660b1fc..0b6114c 100644
--- a/nuvem-parallel/nuvem/list_.py
+++ b/nuvem-parallel/nuvem/list_.py
@@ -15,9 +15,7 @@
# specific language governing permissions and limitations
# under the License.
-def get(r, first, rest):
- rst = rest.get(r)
- if rst is None:
- return (first.get(r),)
- return (first.get(r),) + rst
+def get(*args):
+ r = args[0]
+ return tuple(map(lambda x: x.get(r), args[1:len(args) - 1]))
diff --git a/nuvem-parallel/test.py b/nuvem-parallel/test.py
index 3f93401..ebf2943 100755
--- a/nuvem-parallel/test.py
+++ b/nuvem-parallel/test.py
@@ -37,6 +37,7 @@
from nuvem import equals
from nuvem import lesser
from nuvem import greater
+from nuvem import cons
from nuvem import list_
from nuvem import empty
from nuvem import first
@@ -95,10 +96,13 @@
return True
def testLists():
- assert list_.get((), mkref('first', lambda r: 'abc'), mkref('rest', lambda r: None)) == ('abc',)
- assert list_.get((), mkref('first', lambda r: 'abc'), mkref('rest', lambda r: ())) == ('abc',)
- assert list_.get((), mkref('first', lambda r: 'abc'), mkref('rest', lambda r: ('def',))) == ('abc', 'def')
- assert list_.get((), mkref('first', lambda r: 'abc'), mkref('rest', lambda r: ('def', 'ghi'))) == ('abc', 'def', 'ghi')
+ assert list_.get((), mkref('item', lambda r: None)) == ()
+ assert list_.get((), mkref('item', lambda r: 'abc'), mkref('item', lambda r: None)) == ('abc',)
+ assert list_.get((), mkref('item', lambda r: 'abc'), mkref('item', lambda r: 'def'), mkref('item', lambda r: None)) == ('abc', 'def')
+ assert cons.get((), mkref('first', lambda r: 'abc'), mkref('rest', lambda r: None)) == ('abc',)
+ assert cons.get((), mkref('first', lambda r: 'abc'), mkref('rest', lambda r: ())) == ('abc',)
+ assert cons.get((), mkref('first', lambda r: 'abc'), mkref('rest', lambda r: ('def',))) == ('abc', 'def')
+ assert cons.get((), mkref('first', lambda r: 'abc'), mkref('rest', lambda r: ('def', 'ghi'))) == ('abc', 'def', 'ghi')
assert empty.get(()) == ()
assert first.get((), mkref('l', lambda r: ('abc', 'def'))) == 'abc'
assert rest.get((), mkref('l', lambda r: ('abc', 'def', 'ghi'))) == ('def', 'ghi')