2016-05-01 14 views
2

リストの理解の範囲内でリストに複数の要素を追加することができるかどうかは疑問です。私は番号1〜10からなるリストをしたい場合はリストの理解に複数の要素を追加できますか?

たとえば、私が書くことができます:

[k | k <- [1..10]] 

をしかし、また常にでkk+1を追加することでこれを行う方法があります同じステップで、ちょうど奇数番号だけを取るk?コードの後に​​は無効であるが、おそらく私が何をしようとしているより良い説明:

[k, k+1 | k <- [1, 3..10]] 

現在のところ、これに最も近いものは、(私が知っていること)以下の通りです:

foldl1 (++) [[k, k + 1] | k <- [1, 3..10]] 

答えて

6

ありますいくつかの選択肢がありますが、どちらもあなたの提案よりもはるかに優れています。

concat [ [k, k+1] | k <- [1, 3 .. 10] ] 
join [ [k, k+1] | k <- [1, 3 .. 10] ] 
[ x | k <- [1, 3 .. 10], x <- [k,k+1] ] 
[1, 3 .. 10] >>= (\x -> [x, x + 1]) 
do x <- [1, 3 .. 10] ; [x, x+1] 

それは空のリストオブリストを見つけた場合foldl1 (++)は、あなたのソリューションのように、実行時エラーでプログラムを中止することに注意してください。上記の選択肢には、このような問題はありません。

+0

回答していただきありがとうございます。 – flawr

+2

もう一つは '[1,3,10] >> =(\ x - > [x、x + 1])'です。 – Jubobs

+1

...または等価で '' x ' - [1、3 .. 10] '' [x、x + 1] 'です。 – leftaroundabout

関連する問題