如何返回一个数组,每个元素响应某个检查

时间:2016-11-05 17:05:29

标签: haskell

我想返回一个Bools列表,其中每个都响应某个检查,这是一个javascript示例:

if(x == 2)
    a = false;
if(x == 3)
    b = false;
if(y == 2)
    c = false;
if(y == 3)
    d = false;

return [a, b, c, d];

肮脏的例子,我知道。只是想知道什么是好方法。

2 个答案:

答案 0 :(得分:1)

{name: 'Device Name'}

基本

x=5
y=3

或魔术

zipWith (==) [x,x,y,y] [2,3,2,3]
[False,False,False,True]

答案 1 :(得分:0)

你可以随时使用

f :: (Eq a, Num a,Eq b, Num b) => a -> b -> [Bool]
f x y = [x == 2, x == 3, y == 2, y == 3]

如果您只有一个参数和多个谓词,则可以执行类似

的操作
f x = map ($ x) [p1,p2,p3,p4]
 where p1 = odd
       p2 = even
       p3 = (==3)
       p4 = (==4)

这对于以编程方式创建检查非常有用,另一个技巧是以相反的方式使用它

f x = map (==x) [1..10]

或当您有xs列表时,可以使用zipWith (==) xs [1..]