gpt4 book ai didi

SICP 练习中的 Haskell 数字类型层次结构

转载 作者:行者123 更新时间:2023-12-02 00:21:35 29 4
gpt4 key购买 nike

我最近一直在学习 Haskell,并正在与一位正在通过 SICP 工作的 friend 交谈。我们很好奇比较 Common Lisp 和 Scheme,因此我决定尝试将练习 1.29 翻译成 Haskell 作为练习。

本练习使用函数 sigma,它表示数学求和函数 Sigma。该函数采用一个应用于每一项的函数 f、一个下界、一个应用于每一项以获得下一项的函数以及一个上限。它返回应用于每一项的 f 之和。

simpsonIntegral 应该使用辛普森法则,使用“精度”n 来近似函数 f 在 [a, b] 范围内的积分。我无法让这个函数正常工作,因为我似乎不理解所涉及的类型。

此代码将使用 ghc 版本 6.12.1 进行编译,但 simpsonIntegral 将被赋予一个类型上下文(Integral a、Fractional a),这没有任何意义,并且一旦调用该函数,该函数就会崩溃。我曾经一度让这个工作正常,但我所做的显然是一种黑客行为,我想在这里询问如何惯用地处理这个问题。

如何惯用地处理 h 中所需的积分 -> 分数/实数转换?我读了很多东西,但似乎没有什么是明显和干净的。

sigma :: (Ord a, Num b) => (a -> b) -> a -> (a -> a) -> a -> b
sigma f a next b = iter a 0
where
iter current acc | current > b = acc
| otherwise = iter (next current) (acc + f current)

simpsonIntegral f a b n = 1.0 * (h / 3) * (sigma simTerm 0 (1+) n)
where
h = (b - a) / n
simTerm k = (yk k) * term
where
yk k = f (a + h * k)
term =
case k of
0 -> 1
1 -> 1
otherwise -> if odd k then 4 else 2

最佳答案

fromIntegral :: (Integral a, Num b) => a -> b

r = fromIntegral i

关于SICP 练习中的 Haskell 数字类型层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3407563/

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