【发布时间】:2017-04-04 15:38:00
【问题描述】:
我是一名 Haskell 初学者,目前正在阅读 The Craft of Functional Programming 第 2 版。书中的一个练习要求我编写一个averageThree 函数,我已经这样做了,然后使用averageThree 函数编写一个howManyAboveAverage 函数。
我对如何做到这一点有点坚持,但我发现了一个类似的问题here。我使用了我的代码中给出的解决方案,但是我收到了一个解析错误 [已修复]。
这是我的新代码:
averageThree :: Int -> Int -> Int -> Float
averageThree a b c = fromIntegral (a + b + c) / 3
howManyAverageThree :: Int -> Int -> Int -> Int
howManyAverageThree a b c = length $ filter (> avg) the_three
where avg = averageThree a b c
the_three = fromIntegral <$> [a,b,c]
编辑:新错误
错误跟踪:
[1 of 1] Compiling Main ( average.hs, interpreted )
average.hs:7:36: Not in scope: `<$>'
Failed, modules loaded: none.
我使用 ghci 7.6.3 版本进行编译。由于我正在遵循教科书示例,因此我需要保留函数签名。如何修改此代码以使我不再收到上述错误?
【问题讨论】:
-
我更新了我的答案以反映您的编辑,今后请不要移动问题上的球门柱!如果一个答案解决了您原来的问题,但又暴露了一个新问题,那么最好接受第一个问题的答案并针对您的新问题提出一个新问题。
-
旁注:那本书看起来有点过时(它说要使用 Hugs)。我会研究一个更新的资源,它会让你更好地了解要做什么,并且会有更线性的学习曲线。我学会了使用“Learn you a Haskell”,并且听说过“Real World Haskell”的好消息。它们都是在线免费的。
-
我也使用了 futurelearn 课程,但我发现最初的学习曲线太陡峭。这本书是由课程负责人推荐给我的,作为更渐进的介绍,然后再更深入地处理futurelearn。
标签: haskell