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
아무에게도 설명 할 수있는 이유는 무엇입니까? 복합 함수의 어느 쪽을 읽어야합니까? 수학의 관점에서코드 설명
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
아무에게도 설명 할 수있는 이유는 무엇입니까? 복합 함수의 어느 쪽을 읽어야합니까? 수학의 관점에서코드 설명
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
첫 번째 호출 (회) reuturns 함수. 이 함수에 add1 함수를 전달하면 결과적으로 함수가 다시 생깁니다. 해당 함수에 6을 전달하면 33을 결과로 얻습니다.
f1 = thrice(thrice)
f2 = f1(add1)
print(f2(6))
마지막 줄에 과제를 설명 할 수 있습니까? – Bach
이것은 거대한 스택 확장이된다. –
함수'thrice (thrice)'는 함수를 취해 3^3 = 27 번 합성 된 같은 함수를 반환한다. 그러므로'thrice (addr) (3) '는 입력에 27을 더하는 함수이다. 6 번으로 전화하면 33 번이됩니다. – Bach