2017-09-19 2 views
3

"Objective-CAML로 애플리케이션 개발"의 107 페이지에있는 예제를 따르고 있습니다. ocaml의 지연된 평가

type 'a v = Imm of 'a| Def of (unit -> 'a) 

는 이제 생성자 유형 Def이 지연 평가를 적용하는 방법을 이해하려고? f의 매개 변수가 (unit -> 'a) 인 것은 무엇을 의미합니까?

답변

4

유형 unit -> 'a은 기능을 나타냅니다. 따라서 함수를 호출 할 때까지 계산이 수행되지 않습니다. 나는 연기 되었어.

unit은 함수를 호출 할 때 () (실제로는 유형의 값인 unit의 값)을 전달한다는 것을 의미합니다.

'a은이 함수가 유형 생성자 v의 매개 변수로 지정된 유형의 값을 반환 함을 의미합니다. 따라서 int v은 int를 반환하는 지연 계산 유형입니다. 등등. Def는 유형이 아닌 것을

let deferred_float = Def (fun() -> sin 1.0) 

참고 :

업데이트 여기

유형 float v의 값입니다. 단항 값 생성자 (Some 같은)입니다. Defunit -> '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의 계산은 포함 된 함수를 완전히 호출 할 때까지 연기됩니다.

+0

대단히 감사합니다. 이 질문에 대한 답변입니다. –

+0

후속 질문. 그런 다음 어떻게 Def 유형의 값을 생성합니까? –

+0

(답변에 대한 업데이트를 추가했습니다.) –