【发布时间】:2014-11-12 04:31:10
【问题描述】:
例如,尝试将列表中大于 5 的元素加倍。
将列表中的每个元素加倍我会这样做
doubleAll n = [2*x| x <-n]
现在我想使用列表推导将列表中大于 5 的所有元素加倍。 所以如果我这样做
doubleAll n = [2*x| x <-n, x>5]
我的列表 [1,2,3,4,5] 将导致 [10]。但我希望我的列表显示 [1,2,3,4,10]
谁能解释我做错了什么以及如何解决?
【问题讨论】:
-
一个简单的修复是
doubleAll n = [if x > 5 then 2*x else x | x <-n] -
您做错的是,如果条件为假,则在列表推导中放置一个布尔条件只会跳过该元素,而不是像您预期的那样包含未更改的元素。
-
现在看到这有很大帮助。因为我是haskell的新手,所以我不熟悉语法。如果你能把这个写成答案,我会接受的:)谢谢。
标签: haskell functional-programming