簡體   English   中英

F#函數返回值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM