簡體   English   中英

在haskell中折疊的拼圖功能?

[英]puzzle function with fold in haskell?

我很難弄清楚該功能的工作原理,我需要專家的解釋。 感謝任何幫助!

puzzle n x = scanr (\y acc -> (acc + y/acc)/2) 1 (replicate n x)

我嘗試運行這些:

--puzzle 10 2

--puzzle 10 5

--puzzle 10 36

它分別給我這個輸出:

[1.414213562373095,1.414213562373095,1.414213562373095,1.414213562373095,1.414213562373095,1.414213562373095,1.4142135623746899,1.4142156862745097,1.4166666666666665,1.5,1.0]

[2.23606797749979,2.23606797749979,2.23606797749979,2.23606797749979,2.23606797749979,2.236067977499978,2.2360688956433634,2.238095238095238,2.3333333333333335,3.0,1.0]

[6.0,6.0,6.0,6.0,6.000000005333189,6.0002529841194185,6.055351744849479,6.872226737643129,10.222972972972974,18.5,1.0]

該函數使用牛頓公式計算平方根,並將所有迭代結果存儲在列表中。

是Wiki上的牛頓法。

存儲過程基於掃描儀功能的定義:

scanr與foldr類似,但是從右側返回一個連續的減小值的列表

它列出了n個x-es的列表,例如[x,x,x,x,x,..](n次)

然后它的作用是:

x1 = ( 1 +  x/1)/2
x2 = (x1 + x/x1)/2
x3 = (x2 + x/x2)/2
x4 = (x3 + x/x3)/2

結果是[xn,x(n-1),...,x2,x1]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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