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')