我很清楚 原始递归定义 是什么,但是我似乎仍然无法理解它。
例如,我似乎无法向自己解释如何执行以下操作(但我似乎能够做到):
我(当然)想出了解决方案:
productIt :: [Int] -> Int
productIt [] = 1
productIt (x:xs) = x * productIt xs
这非常适合练习中的问题。然而,我似乎仍然无法理解最后一行。任何关于如何思考这一点的想法将不胜感激。
最佳答案
在英语中,您可以将最后一行读作:
像这样将其转换为英语通常可以帮助我理解递归函数的工作原理和原因。您还可以使用脑中的 Haskell 解释器对其进行评估:
productIt [2,3,4]
= 2 * (productIt [3,4])
= 2 * (3 * (productIt [4]))
= 2 * (3 * (4 * (productIt [])))
= 2 * (3 * (4 * (1)))
= 2 * (3 * (4))
= 2 * (12)
= 24
关于list - 无法理解 Haskell 中的原始递归定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5932549/