2016-12-27 5 views
0
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 

람다가있는 빼기 인쇄를 제외한 모든 것이 제대로 작동합니다. 여기서 내가 뭘 잘못하고 있니?목록에있는 파이썬 고차 함수 FOLD :

결과는이 예제 목록에서 "0"(3-2-1)이어야합니다.

답변

0

시작하기위한 힌트 : fold는 왼쪽 및 오른쪽 조합에 해당하는 좌우의 두 가지 형식으로 제공됩니다. fold의 구현을 검토하면 어떤 것이 있는지 찾아야합니다. 전체 효과를 보려면 "빼기"표현을 확장하십시오.