이 결합기는 무엇을합니까 : s (sk)
-
12-12-2019 - |
문제
이제 s (s k)
의 유형 서명을 이해합니다.
s (s k) :: ((t1 -> t2) -> t1) -> (t1 -> t2) -> t1
.
및 Haskell Winghci 도구에서 오류없이 작동하는 예제를 만들 수 있습니다.
예제 :
.
s (s k) (\g -> 2) (\x -> 3)
2
를 반환합니다.
예제 :
.
s (s k) (\g -> g 3) successor
4
를 반환합니다.
여기서 successor
가 그렇게 정의됩니다 :
.
successor = (\x -> x + 1)
비록, 나는 아직도 s (s k)
가하는 것에 대해서는 직관적 인 느낌이 없어
조합기 s (s k)
는 모든 두 함수 f
및 g
를 사용합니다.s (s k)
는 f
및 g
와 어떤 기능을 수행합니까?s (s k)
가 무엇을하는지 큰 그림 을 줄래?
해결책
괜찮아요, S (S K)
수단을 살펴 보겠습니다.나는 이러한 정의를 사용할 것입니다 :
S = \x y z -> x z (y z)
K = \x y -> x
S (S K) = (\x y z -> x z (y z)) ((\x y z -> x z (y z)) (\a b -> a)) -- rename bound variables in K
= (\x y z -> x z (y z)) (\y z -> (\a b -> a) z (y z)) -- apply S to K
= (\x y z -> x z (y z)) (\y z -> (\b -> z) (y z)) -- apply K to z
= (\x y z -> x z (y z)) (\y z -> z) -- apply (\_ -> z) to (y z)
= (\x y z -> x z (y z)) (\a b -> b) -- rename bound variables
= (\y z -> (\a b -> b) z (y z)) -- apply S to (\a b -> b)
= (\y z -> (\b -> b) (y z)) -- apply (\a b -> b) to z
= (\y z -> y z) -- apply id to (y z)
.
보시다시피, 더 많은 유형의 ($)
가 있습니다.
제휴하지 않습니다 StackOverflow