求小于1000的所有3的倍数或5的倍数之和。
sum$filter(
\x->x`mod`3==0||x`mod`5==0
)[1..999]
concat::[[a]]->[a]
concat xss = [x| xs <- xss, x<-xs]
concat [[1,2,3],[4,5],[6]]
[1,2,3,4,5,6]
zip ['a','b','c'] [1,2,3,4]
[('a',1),('b',2),('c',3)]
take 3 "abcde"
"abc"
下面函数的功能是什么?
sp xs ys = sum[xs!!i*ys!!i| i<-[0..n-1]]
where n = length xs
求两个向量的内积
求1到5的平方
[x^2|x<-[1..5]]
[x|x<-[1..10], even x]
[2,4,6,8,10]
pairs :: [a] -> [(a,a)]
pairs xs = zip xs (tail xs)
pairs [1,2,3,4]
[(1,2) ,(2,3),(3,4)]
zip "abc" [1,2,3,4]
[('a',1),('b',2),('c',3)]
take 10 cycle([1,2,3])
[1,2,3,1,2,3,1,2,3,1]
[(x,y)|x<-[1,2,3],y<-[4,5]]
[(1,4),(1,5),(2,4),(2,5),(3,4),(3,5)]
factors:: Int -> [Int]
factors n = [x| x<-[1..n], n `mod` x == 0]
factors 15
[1,3,5,15]
sorted:: Ord a => [a] -> Bool
sorted xs = and[x<=y|(x,y) <- pairs xs ]
sorted [1,3,2,4]
False
count::Char -> String -> Int
count x xs = length [x'| x' <- xs, x == x' ]
count 's' "Mississippi"
4
take 6 (repeat 5)
[(x,y)|y<-[4,5], x<-[1,2,3]]
[(1,4),(2,4),(3,4),(1,5),(2,5),(3,5)]
prime::Int -> Bool
prime n = factors n == [1,n]
prime 15
False
positions x xs =[i| (x', i)<- zip xs [0..], x==x']
positions 0 [1,0,0,1,0,1,1,0]
[1,2,4,7]
perfect number:一个整数等于其小于自身的全部因子之和
例如:6=1+2+3
设计一个判断某数是否是perfect number的函数
perfect : Int -> Bool
perfect n = sum(init (factors n))==n
replicate 3 6
[6,6,6]
[(x,y)|x<-[1..3],y<-[x..3]]
[(1,1),(1,2),(1,3),(2,2),(2,3),(3,3)]
primes :: Int -> [Int]
primes n =[x| x<-[2..n], prime x ]
primes 40
返回小于40的全部质数
length "abcd"
4
\Sigma_{i=0} ^{n-1}xs_i \times ys_i
sp xs ys = sum[x*y| (x,y) <- zip xs ys]
4 `elem` [3,4,5,6]
True