【发布时间】:2017-02-06 08:09:49
【问题描述】:
假设我有以下功能
printVariance :: [Float] -> IO ()
printVariance [] = return ()
printVariance (x:xs)
| x >= avg (x:xs) = print (x - avg (x:xs)) >> printVariance xs
| otherwise = printVariance xs
获取列表,检查哪些元素大于平均值并打印它们的value - avg。
我的问题是avg 值每一步都在变化。如何只定义一次并将其值用于递归?
【问题讨论】:
-
您可能希望使用折叠和映射来重写它,而不是直接递归。这将允许您附加
where或let绑定,您可以将avg定义为类似于(foldr (+) 0 xs) / length xs的内容。
标签: haskell recursion functional-programming