"Objective-CAML로 애플리케이션 개발"의 107 페이지에있는 예제를 따르고 있습니다. ocaml의 지연된 평가
type 'a v = Imm of 'a| Def of (unit -> 'a)
는 이제 생성자 유형
Def
이 지연 평가를 적용하는 방법을 이해하려고? f의 매개 변수가
(unit -> 'a)
인 것은 무엇을 의미합니까?
"Objective-CAML로 애플리케이션 개발"의 107 페이지에있는 예제를 따르고 있습니다. ocaml의 지연된 평가
type 'a v = Imm of 'a| Def of (unit -> 'a)
는 이제 생성자 유형
Def
이 지연 평가를 적용하는 방법을 이해하려고? f의 매개 변수가
(unit -> 'a)
인 것은 무엇을 의미합니까?
유형 unit -> 'a
은 기능을 나타냅니다. 따라서 함수를 호출 할 때까지 계산이 수행되지 않습니다. 나는 연기 되었어.
unit
은 함수를 호출 할 때 ()
(실제로는 유형의 값인 unit
의 값)을 전달한다는 것을 의미합니다.
'a
은이 함수가 유형 생성자 v
의 매개 변수로 지정된 유형의 값을 반환 함을 의미합니다. 따라서 int v
은 int를 반환하는 지연 계산 유형입니다. 등등. Def
는 유형이 아닌 것을
let deferred_float = Def (fun() -> sin 1.0)
참고 :
업데이트 여기
유형 float v
의 값입니다. 단항 값 생성자 (Some 같은)입니다. Def
을 unit -> 'a
유형의 값으로 취하는 함수로 생각하면 유용 할 수 있으며 'a v
유형의 값을 반환합니다. 또는이 기능을 보유하고있는 작은 태그가 지정된 데이터 구조라고 생각할 수 있습니다. 두 경우 모두 값이 아니라 형식입니다. 이 최상위에 보이는 방법은 다음과
가있다 :
# let deferred_float = Def (fun() -> sin 1.0);;
val deferred_float : float v = Def <fun>
당신이 sin 1.0
을 계산하는 데 시간이 오래 (말 분) 소요 상상 경우, 포인트는 값 deferred_float
이 순간적으로 더 많거나 적은 구성되어 있다는 것입니다 . sin 1.0
의 계산은 포함 된 함수를 완전히 호출 할 때까지 연기됩니다.
대단히 감사합니다. 이 질문에 대한 답변입니다. –
후속 질문. 그런 다음 어떻게 Def 유형의 값을 생성합니까? –
(답변에 대한 업데이트를 추가했습니다.) –