하스켈에서 교회 숫자를 구현하려하지만 사소한 문제가 발생했습니다. 하스켈은 수표를 발생haskell에서 교회 숫자를 뺍니다.
와 무한한 종류의 불평 : 무한 유형 만들 수 없습니다 : t = (t -> T1) - 나는 노력과 뺄셈을 할 때> T2
-> (T1 -> T2)를. 나는 나의 람다 미적분학이 유효하다는 것을 99 % 긍정적이다. (그렇지 않다면 말해라.). 내가 알고 싶은 것은, haskell이 제 기능을 수행하도록 할 수있는 일이 있는지입니다.
module Church where
type (Church a) = ((a -> a) -> (a -> a))
makeChurch :: Int -> (Church a)
makeChurch 0 = \f -> \x -> x
makeChurch n = \f -> \x -> f (makeChurch (n-1) f x)
numChurch x = (x succ) 0
showChurch x = show $ numChurch x
succChurch = \n -> \f -> \x -> f (n f x)
multChurch = \f2 -> \x2 -> \f1 -> \x1 -> f2 (x2 f1) x1
powerChurch = \exp -> \n -> exp (multChurch n) (makeChurch 1)
predChurch = \n -> \f -> \x -> n (\g -> \h -> h (g f)) (\u -> x) (\u -> u)
subChurch = \m -> \n -> (n predChurch) m
타입 선언 a type (a -> a) -> a -를 만들어야합니다. 청소기가 다르지 않습니다. – alternative
또한 형식 서명을 쓰는 데 도움이됩니다. 그것은 정확히 어디에 문제가 있는지 알려 줄 것입니다 ... – alternative
ghci가 적절하게 유추 할 수 있는지 확인하기 위해 형식 시그니처를 제거하고 결과적으로 오류를 제거합니다 (오류가 변경되지 않았습니다) ... 또한 유형 주변의 괄호를 선호합니다. 그것은 내게 더 두드러지게합니다 – Probie