在下面的代码片段中,您可以看到我在 Haskell 中编写的两个 collatz 函数。对于递归应用程序,我在第一个示例 (collatz) 中使用了括号来获得正确的优先级。
因为我刚刚学习了 $ 的函数应用程序,所以我尝试使用那个东西重写函数(collatz')。但是,我遇到以下错误:
无法将预期类型 `[a]' 与推断类型 `a1 -> [a1]' 匹配 在 `(:)' 的第二个参数中,即 `collatz'' 在 `($)' 的第一个参数中,即`n : collatz'' 在表达式中:n : collatz' $ n `div` 2
collatz :: (Integral a) => a -> [a]
collatz 1 = [1]
collatz n | even n = n : collatz (n `div` 2)
| otherwise = n : collatz (n * 3 + 1)
collatz' :: (Integral a) => a -> [a]
collatz' 1 = [1]
collatz' n | even n = n : collatz' $ n `div` 2
| otherwise = n : collatz' $ n * 3 + 1
这对我来说很奇怪,这不起作用。所以我尝试了一个类似的例子:
True : [even $ 3 `div` 3]
如果有人可以看看它并告诉我我做错了什么,我将不胜感激。