0

如何使用列表理解在 Haskell 中定义集群?我想为集群定义一个函数:

 ( a b c ) = [ a <- [1 .. 10],b<-[2 .. 10], c = (a, b)]
4

1 回答 1

2

在您的评论中,您给出了示例[(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)]
于 2013-03-24T21:44:58.580 回答