2017-03-11 7 views
2

왜 "DIV/0"과 "2"가 처음으로 인쇄됩니까?F # CPS/부분 응용 프로그램을 사용한 실행 순서

let printZero = printfn "DIV/0" 
let printSuccess x = printfn "%d" x 

let div ifZero success x y = 
    if y = 0 
    then ifZero 
    else x/y |> success 

let printDiv = div printZero printSuccess 
printDiv 8 4 
printDiv 10 0 
+0

당신이 printZero 함수처럼 행동하려면 다음을 수행해야합니다 단위를 인수로 추가하십시오. let printZero() = ... – Matiasd

답변

5

printfn "DIV/0"unit을 반환하는 즉시 콘솔에 기록합니다. 그래서이 라인 :

let printZero = printfn "DIV/0" 

는 ... 즉시 DIV/0를 작성하고 값 printZerounit을 결합합니다. 나중에 div 함수를 y = 0으로 호출하면 그 값을 반환합니다.

printZero은 원하는 기능입니다. 이 함수는 입력으로 값을 필요로하지 않기 때문에, 당신도 여기 unit을 사용할 수 있습니다 (()로 표현) - 그래서 당신은 유형 unit -> unit의 기능을 가지고 :

let printZero() = printfn "DIV/0" 
let printSuccess x = printfn "%d" x 

let div ifZero success x y = 
    if y = 0 
    then ifZero() 
    else x/y |> success