python高阶函数列表上的FOLD

时间:2016-12-27 13:21:55

标签: python lambda linked-list nodes fold

class Node:
    def __init__(self, head, tail):
        self.head = head
        self.tail = tail
        self.isEmpty = False

class Empty:
    def __init__(self):
        self.isEmpty = True

def fold(ls,f,z):
    if ls.isEmpty:
        return z
    else:
        return f(ls.head,fold(ls.tail,f,z))

print(fold(Node(4,Node(3,Node(2,Node(1,e)))),lambda x,y:x+y,0)) ## Sum
print(fold(Node(3,Node(2,Node(1,e))),lambda x,y:x*y,1)) ## Multiply
print(fold(Node(3,Node(2,Node(1,e))),lambda x,y:x-y,0)) ## Minus

一切正常,除了带有lambda的减号。我在这里做错了什么?

此示例列表中的结果应为" 0"(3-2-1)。

1 个答案:

答案 0 :(得分:0)

提示你开始:折叠有两种形式:左和右,对应左右相关性。如果您检查fold的实现,您应该发现它是哪一个。扩大"减号"表达看到完整的影响。