gpt4 book ai didi

list - Haskell 求收敛序列的值

转载 作者:行者123 更新时间:2023-12-05 00:17:33 24 4
gpt4 key购买 nike

全新的 Haskell。我正在玩斐波那契数列来学习语言的基础知识,但我找不到做某事的惯用方法。

斐波那契数列可以这样定义:

fibs = 1 : 1 : zipWith (+) fibs (tail fibs)

(这已经很酷了)。然后,我想使用该序列来近似黄金比例 (Phi)。所以 :
ratios = zipWith (/) (tail fibs) fibs

是一个越来越好的 Phi 近似值列表。假设我想在列表在给定阈值 epsilon 下“稳定”时获得第一个值。 (即:比率的两个连续值之间的差异小于 epsilon)。我可以看到我将如何在命令式语言(使用索引)中做到这一点,但是在 Haskell 中如何惯用地做到这一点?

(我们是否需要使用以下列表?但是如何使用?)
diffs = zipWith (-) ratios (tail ratios)

最佳答案

如何?通过使用另一个 zip .这是基于您已有的单行:

snd . head . dropWhile (\(p1,p0) -> abs (p0 - p1) >= epsilon) $ zip ratio (tail ratio)

从右到左阅读,这是说:
  • zip与他们的继任者一起列出比率列表
  • 如果比率之间的差异大于 epsilon,则继续从列表中删除元素
  • 完成后,我们取列表的第一个元素并选择两者中更精确的元素。
  • 关于list - Haskell 求收敛序列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40006138/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com