내가 그것을 이해하는 방법, 그것은 당신이 제공하는 것과 동일한 것을 출력하도록 함수의 값을 찾습니다. 문제는 항상 정의되지 않은 (또는 무한 루프, 하스켈에서 정의되지 않은 루프와 무한 루프가 동일 함) 또는 가장 많이 정의되지 않은 항목을 선택한다는 것입니다. 예를 들어, id를 사용하면
λ <*Main Data.Function>: id undefined
*** Exception: Prelude.undefined
보시다시피 undefined는 고정 된 점이므로이를 fix
선택합니다. 대신에 (\ x-> 1 : x).
λ <*Main Data.Function>: undefined
*** Exception: Prelude.undefined
λ <*Main Data.Function>: (\x->1:x) undefined
[1*** Exception: Prelude.undefined
따라서 fix
정의되지 않은 것을 선택할 수 없습니다. 무한 루프에 조금 더 연결되도록 만듭니다.
λ <*Main Data.Function>: let y=y in y
^CInterrupted.
λ <*Main Data.Function>: (\x->1:x) (let y=y in y)
[1^CInterrupted.
다시 말하지만 약간의 차이가 있습니다. 그렇다면 고정 소수점은 무엇입니까? 시도해 봅시다 repeat 1
.
λ <*Main Data.Function>: repeat 1
[1,1,1,1,1,1, and so on
λ <*Main Data.Function>: (\x->1:x) $ repeat 1
[1,1,1,1,1,1, and so on
동일합니다! 이것이 유일한 고정 점이기 때문에 fix
그것을 정해야합니다. 죄송합니다 fix
. 무한 루프가 없거나 정의되지 않았습니다.
fix error
ghci를 입력 하고 자신에 대해 기분이 좋아질 수 있습니다 ."