繁体   English   中英

Haskell中的高阶函数

[英]higher-order functions in Haskell

我写了以下代码:

hosum :: (Int->Int)->(Int->Int)     
hosum f 0 = 1
hosum f n = afunction f (-abs(n)) (abs(n))


afunction :: (Int->Int)->Int->Int->Int
afunction f a z
    |a==z
        = 0
    |otherwise
        = afunction f (a+1) z + afunction f a z

从-| n |中找到f(i)的总和 | n | ..我的错误在哪里?

正如注释中指出的那样,您的代码从不调用f函数。 您的代码中还有其他一些我不明白的地方:

  1. hosum f 0 = 1 为什么对任何f都是一个。 不应该是f 0吗?

  2. afunction ,为什么结果0 ,如果a == z 如果范围是包含范围,则仅当a > z时才应为零。

  3. otherwise afunction调用两次。 为什么不将f应用于a并仅调用afunction f (a + 1) z

现在介绍正确的解决方案。 实现它的最简单(惯用)方法是使用标准summap函数。 它提供了一线(如果我们不计算类型签名的话):

hosum :: (Int -> Int) -> Int -> Int
hosum f n = sum $ map f [-abs(n)..abs(n)]

用简单的英语来说,此函数采用从-abs(n)abs(n)的所有数字的列表,将f应用于每个数字并将其求和。 这正是问题陈述告诉我们要做的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM