使用或在列表理解 [英] Using or in list comprehension
问题描述
我正在尝试将1至10之间的每个数字都除以5或3
来整除这里是我的代码,直到现在 -
giveList =
[x
| x < - [1..10],
(x`mod`5 == 0)或(x`mod`3 == 0)
]
然后我用ghci加载函数。但它给了我一个错误 -
> [1 of 1]编译Main(problem1.hs,解释)
problem1.hs:4:10:
函数`x`mod` 5 == 0'适用于两个参数
但其类型Bool没有
在表达式中:(x`mod` 5 == 0)或(x`mod` 3 == 0)
在句柄的列表理解:
(x`mod` 5 == 0)或(x`mod` 3 == 0)
在表达式中:
[x | x < - [1 .. 10],(x`mod` 5 == 0)或(x`mod` 3 == 0)]
失败,加载模块:无。
我的问题是 -
- 我们可以在列表解析中使用'或'吗?
- 如果不是,请告诉我如何以其他方式完成。 b
我是函数式编程新手,请帮助我。
您可以在列表解析中使用或
,但
Prelude> :t或
或:: [Bool] - > Bool
这不是你在那个地方需要的那个,它是一个函数,该列表是 True
。您需要
(||):: Bool - >布尔 - > Bool
如果要使用名称由字母中缀组成的函数,则需要附上它反引号,就像你对 mod
做的一样,但是既然或者
只有一个参数,你就不能使用这个函数中缀。
您的清单的正确版本为
giveList = [x | x < - [1..10],x`mod`5 == 0 || x`mod` 3 == 0]
I'm trying to take out every number between 1 to 10 that is divisible by either 5 or 3
Here is my code till now -
giveList =
[ x
| x <- [1..10] ,
(x `mod` 5 == 0) or (x `mod` 3 == 0)
]
And then I load the function in ghci. But it's giving me a error -
> [1 of 1] Compiling Main ( problem1.hs, interpreted )
problem1.hs:4:10:
The function `x `mod` 5 == 0' is applied to two arguments,
but its type `Bool' has none
In the expression: (x `mod` 5 == 0) or (x `mod` 3 == 0)
In a stmt of a list comprehension:
(x `mod` 5 == 0) or (x `mod` 3 == 0)
In the expression:
[x | x <- [1 .. 10], (x `mod` 5 == 0) or (x `mod` 3 == 0)]
Failed, modules loaded: none.
My question is -
- Can we use 'or' in list comprehensions?
- If not, please tell me how it can be done in other ways
I'm new to functional programming, please help me.
You can use or
in list comprehensions, but
Prelude> :t or
or :: [Bool] -> Bool
that is not the one you need at that place, it's a function that checks whether any element in the list is True
. There you need
(||) :: Bool -> Bool -> Bool
And if you want to use a function with a name consisting of letters infix, you need to enclose it in backticks, like you did with mod
, but since or
takes only one argument, you cannot apply that function infix.
A correct version of your list would be
giveList = [ x | x <- [1 .. 10], x `mod` 5 == 0 || x `mod` 3 == 0]
这篇关于使用或在列表理解的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!