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)]

その例では、真ん中の数だけが変化し、他の 2 つは常に 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タプルの 3 つの要素の最初の要素に をコピーできます。

> [(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 に答える