然后在Haskell列表理解中解析错误

时间:2015-09-11 00:00:09

标签: haskell if-statement list-comprehension

所以Learn You A Haskell中有一个例子,我想用列表理解来重铸。基本上它应该是一个简单的函数let sayMe xs = [ if x <- [1..5] then show x else "Not a desired value" | x <- xs] 如下

parse error in if statement: missing required then and else clauses

不幸的是,当我尝试定义函数时,我收到以下错误:

then

但是,我那里有elselet sayMe xs = [if x<10 then "Bang!" else "Boom!"|x<-xs, odd x] 条款,据我所知,我的功能不是很远,而是远离另一个在我已经验证工作的书中的例子:

{{1}}

我知道还有其他方法可以做到这一点,但我想了解为什么这种特殊方法不能按照我认为的方式运作。

1 个答案:

答案 0 :(得分:4)

if-then-else表达式有三个部分:条件,True分支和False分支。这些部分中的每一部分都必须是表达式x <- [1..5]不是表达;它是列表理解语法的一部分。但是,你可以用表达式来表达这个概念。

[ if 1 <= x && x <= 5 then show x else "Not a desired value" | x <- xs ]

如果您感兴趣的内容不是连续的,您可以使用elem函数:

[ if x `elem` [1,17,94,12] then show x else "Not a desired value" | x <- xs ]