F#でやってみた。 拡張メソッド定義してるだけなので、実質「Execute(0, fun () -> printnf "zero")」と同じ
type System.Int32 with member x.Execute func = match x with 0 -> () | n -> func()
> (0).Execute (fun () -> printfn "zero");; val it : unit = () > (1).Execute (fun () -> printfn "one");; one val it : unit = () > (1 - 1).Execute (fun () -> printfn "zero");; val it : unit = ()