【发布时间】:2017-02-21 16:48:32
【问题描述】:
对 Haskell 来说是全新的。我正在玩斐波那契数列来学习语言的基础知识,但我找不到惯用的方法来做某事。
斐波那契数列可以这样定义:
fibs = 1 : 1 : zipWith (+) fibs (tail fibs)
(这已经很酷了)。然后,我想使用该序列来近似黄金比例(Phi)。所以:
ratios = zipWith (/) (tail fibs) fibs
是 Phi 的越来越好的近似值列表。假设我想在列表在给定阈值 epsilon 下“稳定”时获得第一个值。 (即:两个连续的比率值之间的差异小于 epsilon)。我可以看到我将如何在命令式语言(使用索引)中做到这一点,但是在 Haskell 中如何惯用地做到这一点?
(我们需要使用以下列表吗?但是如何使用?)
diffs = zipWith (-) ratios (tail ratios)
【问题讨论】:
-
提示:
zip ratios diffs将是(ratio, derivative)对的列表。所以你会想要find the first element 中的zip ratios diffs的导数低于阈值。
标签: list haskell functional-programming