lambda in F#
F#中的lambda表达式很容易给人造成误解,好象它只支持单行的语句,其实不然,它是可以支持多行的,比如
let f = (fun () ->
(printf "hello"
printfn " world"
))
只是上面这种写法实在太过难看,所以一般推荐写成一行,语句之间用分号隔开,
let f = (fun() -> ( printf "hello"; printfn "world"))。
当然用分号隔开的可读性也不好,比如用F#来实现的SICP 3.1节中的make-withdraw,读起来还是很让人头痛的。
let makewithdraw (balance:int) =
let refb = ref balance
fun amount -> ( if !refb >= amount then refb := !refb-amount; !refb; else failwith "Insufficient funds")
let refb = ref balance
fun amount -> ( if !refb >= amount then refb := !refb-amount; !refb; else failwith "Insufficient funds")