1
나는 람다 미적분학을 쓰려고하는데, 교회 조건부를 쓸 수는 없습니다. 나는 아마 내가 하스켈 멍청이라고 말해야한다.교회 인코딩 (조건부)
저는 솔루션을 온라인과 그 외의 방법으로 살펴 보았습니다. 그러나 모든 유형과 다른 트릭을 도입하는 것이지만 가능한 한 원래 구문에 가깝게 유지하려고합니다. 예를 들어 :
\a.\b.a
\a.\b.b
경우/다른 교회를 위해 정확한 구문에 맞게 어떤 방법 :
tru :: Integer -> Integer -> Integer
tru = \x -> \y -> x
fals :: Integer -> Integer -> Integer
fals = \x -> \y -> y
main = do
print (tru 2 3)
print (fals 5 6)
교회 부울에 대한 정확한 구문을 일치? 나는 \p.\a.\b.p a b
를 복제하기 위해 노력하고있어,하지만 난 내가 잘못 모르겠어요 :
ifelse :: Integer -> Integer -> Integer -> Integer -> Integer -> Integer
ifelse = \p -> \a -> \b -> p -> a -> b
main = do
print (tru 2 3)
print (fals 5 6)
print (ifelse tru 42 58)
여기서 교회 숫자에 지수 연산을 수행하려면 rank-n 유형이 실제로 필요하다는 점에 유의하십시오. –
@ AndrásKovács Really RankNTypes는 모든 교회 숫자에 필수적이어야합니다. 'CNum = forall c. (c -> c) -> c -> c'. 그렇지 않으면 파라 메트릭을 깨고 '-1'과 같은 OP 코드를 사용하여 교회 숫자가 아닌 것을 반환 할 수 있습니다. – jozefg
감사합니다. 이것은 많은 도움이됩니다. 단지 질문 : 교회 인코딩을 사용하는 데 제한이 있습니까? 예를 들어, 그들과 함께 전체 프로그래밍 언어를 작성할 수 있습니까? 표현을 다시 최종 사용자가 읽을 수있는 것으로 변환 할 수 있다고 가정합니다. – antimatter