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