2010-12-18 2 views

답변

10

에 대해 어떻게 :

# let l = lazy (2+2) ;; 
val l : int lazy_t = <lazy> 
# Lazy.force l ;; 
- : int = 4 

의미는 정확히 (fun() -> ...)...()과 동일하지 않습니다 그것은 정말 짧은 아니다 :

lazy (f a b c) 

이 같이 Lazy.force을 사용, "적용"합니다. 아마도 lazy 또는 fun() ->에 대한 편리한 구문이 필요한 경우 해당 목적에 camlp {4,5} 확장자를 사용해야합니다.

6

ff a b c() = ...으로 정의 된 경우 a (f a b c)을 수행 할 수 있지만 그 외에는 더 짧은 방법이 없습니다.

이 같은 기능 const을 정의 할 수 있습니다 당신이 원하는 경우

let const x _ = x 

을 그리고 다음과 같이 사용 :

a (const (f a b c)) 

을하지만 실제로 사용하는 것보다 훨씬 더 짧은 (또는 명확하게) 아니다 fun. 또한 즉시 f a b c을 평가합니다. 어쨌든 원하는 것은 아닙니다.

추신 : 내 속의 브랜치는 (fun() -> ...)이 단항 함수이며 ocaml에 제로시 함수가 없음을 지적해야합니다.

+2

'const'의 문제점은'(fun() -> ...)'은 대개 OCaml의 엄격한 평가로 인해'const' 함수가 할 수없는 코드의 평가를 지연시키는 것을 의미합니다. – gasche

+0

@gasche : 지연된 평가에 대한 좋은 지적. 그리고 예, 실수로 SML을 작성하여 수정했습니다. – sepp2k

+0

감사합니다. 내 현재 fun() -> ... '접근 방식을 유지할 것입니다. – Nutel

관련 문제