【发布时间】:2018-09-09 10:21:53
【问题描述】:
我尝试简单地遍历一个列表并返回每个元素。
iterateList [] = error "empty list"
iterateList [a] = a
iterateList (x:xs) = x iterateList xs
在第三行,我尝试返回第一个元素,然后递归调用 List 尾部的 iterateList。
但这不起作用。知道为什么吗?
示例: 输入:迭代列表 [1,2,3,4,5] 输出:1 2 3 4 5
【问题讨论】:
-
您的问题不清楚 - 如果您“返回列表的每个元素”,您将获得原始列表。你想以某种方式处理元素吗?
-
@simplesystems 您认为示例中的“空间”是什么?你想打印列表的每个元素,它们之间有一个空格吗?在 Haskell 中,打印是一项比您想象的更复杂的任务,并且与仅仅“返回”有很大不同。
-
首先,您需要停止循环思考。接下来,您可以使用列表本身来完成所有这些事情。
-
一个好的起点可能是Learn you a Haskell chapter on lists。它有简单列表操作的例子,后面的章节有很多更有趣的对列表进行操作的函数。
-
@simplesystems:但是在函数式编程中,您不会考虑循环,而是考虑函数。此外,所有数据都是不可变的:您无法更改列表、其元素或这些元素的字段。