재귀 유형을 허용하는 OCaml의 -rectypes에 해당하는 GHC는 무엇입니까? 문서에 하나도 없습니다. 숨겨진 기능입니까?
불행히도 모든 재귀는 데이터 유형을 거쳐야합니다. 그러나 약간의 골칫거리를 기꺼이 참아 내고 싶다면 재귀 유형을 꽤 쉽게 작성할 수 있습니다.
newtype RecArr b a = RecArr {unArr :: RecArr b a -> b}
unfold = unArr
fold = RecArr
이제 우리는 할 수 fold
및 unfold
우리의 RecArr
우리의 마음의 콘텐츠에 우리의 재귀를 전개합니다. 이것은 수동이기 때문에 약간 고통 스럽지만 완전히 실행 가능합니다. 데모로, 여기에 사용하여 작성된 Y 콤비의 fold
과 unfold
.
y f = (\x -> f (unfold x x)) $ fold (\x -> f (unfold x x))
factorial f n = if n == 0 then 1 else n * f (n-1)
main = print (y factorial 5) -- prints 120
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다