문제

이제 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)는 모든 두 함수 fg를 사용합니다.s (s k)fg와 어떤 기능을 수행합니까?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)
.

보시다시피, 더 많은 유형의 ($)가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top