假设我有以下功能保存变量,并用它在递归
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
值每一步都会改变。我怎样才能定义它一次并使用它的递归值呢?
您可能需要使用折叠和贴图来重写,而不是直接递归。这将允许你在'(foldr(+)0 xs)/ length xs'的行上附加一个'where'或'let'绑定,你将'avg'定义为某些东西。 – Michail