プログラミング Haskell 読書メモ 5.2 リスト内包表記・ガード

プログラミング Haskell 5.2 リスト内包表記・ガード

ガードはリストの前方で生成した値を間引く。

Prelude>  [x|x<-[1..10]]
[1,2,3,4,5,6,7,8,9,10]
Prelude>  [x|x<-[1..10], even x]
[2,4,6,8,10]
Prelude>  [x|x<-[1..10], even x, x > 5]
[6,8,10]

1からnまでの約数を求める。

Prelude>  let factors n = [x|x<-[1..n], n `mod` x == 0]
Prelude>  factors 15
[1,3,5,15]

約数が1とn以外にないものは素数である。

Prelude>  let isPrime n = [x|x<-[1..n],n `mod` x ==0]==[1,n]
Prelude>  isPrime 3
True
Prelude>  isPrime 4
False
Prelude>  isPrime 31
True

nまでの素数を求める関数。

Prelude>  let primes n = [x|x<-[2..n], isPrime x]
Prelude>  primes 100 
[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97]

タプルのリストからキーの一致するタプルの値を返す。

Prelude>  let find k t = [v|(k',v)<-t, k==k']
Prelude>  find 'b' [('a',1),('b',2),('c',3),('b',4)]
[2,4]