プログラミング 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]