[英]F# function return value
我是F#的新手,當我嘗試實現rpt
函數時,發現了一些麻煩。
let rec rpt f n x =
if n=0 then x
else
f ( rpt f (n-1) x )
當我將此函數稱為rpt (fun x -> x*x) 4 2
。 答案是val it : int = 65536
但是當我如下更改rpt
時(僅乘以2):
let rec rpt f n x =
if n=0 then 2*x
else
f ( rpt f (n-1) x )
函數僅返回零: val it : int = 0
。 誰能解釋會發生什么?
重復四次平方函數得到的總冪為2 ^ 4 = 16,這與您的第一個答案-65536 = 2 ^ 16完全一致。 但是,如果在開始時添加額外的第二次冪,則總冪為16 * 2 = 32,恰好是int
類型的大小,因此它會完美溢出並給出零。
您可以通過將int
替換為int64
來驗證這一點:
let rec rpt f n x =
if n=0 then 2L*x
else
f ( rpt f (n-1) x )
> rpt (fun x -> x*x) 4 2L;;
val it : int64 = 4294967296L
> pown 2L 32;;
val it : int64 = 4294967296L
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.