2014-02-06 5 views
1
def compose(f, g): 
    return lambda x:f(g(x)) 

def thrice(f): 
    return compose(f, compose(f, f)) 

add1 = lambda x: x + 1 


print(thrice(thrice)(add1)(6)) = 33 

아무에게도 설명 할 수있는 이유는 무엇입니까? 복합 함수의 어느 쪽을 읽어야합니까? 수학의 관점에서코드 설명

+0

마지막 줄에 과제를 설명 할 수 있습니까? – Bach

+3

이것은 거대한 스택 확장이된다. –

+3

함수'thrice (thrice)'는 함수를 취해 3^3 = 27 번 합성 된 같은 함수를 반환한다. 그러므로'thrice (addr) (3) '는 입력에 27을 더하는 함수이다. 6 번으로 전화하면 33 번이됩니다. – Bach

답변

1

1) compose(f, g) = f ∘ g

2) 다음 thrice(f) = f ∘ f ∘ f. 이어서

3) 다음 T := thrice(thrice) = thrice ∘ thrice ∘ thrice

4) 다음 T(f) = f ∘ f ∘ f ∘ f ∘ f ∘ ... # 27 번

5) 다음 thrice(thrice)(add1) = T(add1) = add1 ∘ add1 ∘ ... # 27 번

6) thrice(thrice(add1))(x) = x + 27

0
회의

첫 번째 호출 (회) reuturns 함수. 이 함수에 add1 함수를 전달하면 결과적으로 함수가 다시 생깁니다. 해당 함수에 6을 전달하면 33을 결과로 얻습니다.

f1 = thrice(thrice) 
f2 = f1(add1) 
print(f2(6))