如何使用列表理解在 Haskell 中定义集群?我想为集群定义一个函数:
( a b c ) = [ a <- [1 .. 10],b<-[2 .. 10], c = (a, b)]
在您的评论中,您给出了示例[(1,2,1),(1,3,1),(1,4,1),(1,5,1),(1,6,1),(1,7,1)]
。
在那个例子中,只有中间的数字会改变,其他两个总是 1。你可以用
ones = [(1,a,1)| a<-[1..7]]
但是,您可能想要改变其他的。让我们看看它是如何工作的,但我将使用字母来使其更清晰:
> [(1,a,b)| a<-[1..3],b<-['a'..'c']]
[(1,1,'a'),(1,1,'b'),(1,1,'c'),(1,2,'a'),(1,2,'b'),(1,2,'c'),(1,3,'a'),(1,3,'b'),(1,3,'c')]
您可以看到字母的变化比数字更频繁——b<-[1..3]
就像一个外循环,内c<-['a'..'c']
循环。
您可以将 复制c
到元组的三个元素中的第一个:
> [(b,a,b)| a<-[1..3],b<-['a'..'b']]
[('a',1,'a'),('b',1,'b'),('a',2,'a'),('b',2,'b'),('a',3,'a'),('b',3,'b')]
或者给每个不同的输入
> [(a,b,c)| a<-[1..2],b<-['a'..'b'],c<-[True,False]]
[(1,'a',True),(1,'a',False),(1,'b',True),(1,'b',False),(2,'a',True),(2,'a',False),(2,'b',True),(2,'b',False)]