3
저는 하스켈을 처음 접하고 Arrow tutorial을 읽었습니다. 나는 하스켈이 loop
기능을 평가하는 방법을 이해 할 수 없습니다하스켈에서 게으른 포워드 참조
line (A)
에서
newtype Circuit a b = Circuit { unCircuit :: a -> (Circuit a b, b) }
instance ArrowLoop Circuit where
loop (Circuit cir) = Circuit $ \b ->
let (cir', (c,d)) = cir (b,d) -- line (A)
in (loop cir', c)
, 변수 d
이 초기화되기 전에 사용된다. 어떻게 가능합니까? GHC는 고정 소수점 계산을 수행합니까?
이것은 고전적인 Haskell fibonacci 함수와 비슷합니다 :'let fibs = 0 : 1 : zipWith (+) fibs (tail fibs)'. 여기서 fibs는 자체 정의에서 사용됩니다. 다른 언어에서는 종종 재귀 함수에서만 수행 할 수 있으며 포인터는 명시 적으로 사용하지 않고 값을 자체 재귀 적으로 사용할 수 없습니다. – Axman6