pascalabcnet/TestSamples/Haskell_Samples/Predule1.hs
Бондарев Иван e6e67c193c initial commit
2015-05-14 21:35:07 +02:00

84 lines
2.1 KiB
Haskell

module Main where
eq x y = x==y
noteq x y = not(x==y)
max x y | x <= y = y
max x y | not(x <= y) = x
min x y | x <= y = x
min x y | x > y = y
succ x = x+1
pred x = x-1
condition x = x>4
until p f x | (p x) = x
until p f x | otherwise = (until p f (f x))
map f [] = []
map f x:xs = (f x) : (map f xs)
filter p [] = []
filter p x:xs | (p x) = x : (filter p xs)
filter p x:xs | otherwise = (filter p xs)
head [] = "Prelude.head: ïóñòîé ñïèñîê"
head x:xs = x
tail [] = "Prelude.tail: ïóñòîé ñïèñîê"
tail (x:xs) = xs
length [] = 0
length (h:t) = (length t) + 1
init [] = "Prelude.init: ïóñòîé ñïèñîê"
init x | (length x)==1 = []
init x | otherwise = (head x) : (init(tail x))
f x y = x+y
foldr a x [] = x
foldr a x h:t = (a h (foldr a x t))
foldl a z [] = z
foldl a z x:xs = (foldl a (a z x) xs)
take n _ | n <= 0 = []
take _ [] = []
take n x:xs = x:(take n-1 xs)
drop n xs | n <= 0 = xs
drop _ [] = []
drop n x:xs = (drop n-1 xs)
splitAt n xs = ((take n xs), (drop n xs))
[] `plusplus` ys = ys
x:xs `plusplus` ys = x:(xs `plusplus` ys)
main = do {
(print(eq 2 2));
(print(noteq 2 2));
(print(min 8 3));
(print(max 8 3));
(print(until condition succ 1));
(print(map succ [1,2,3,4,5]));
(print(filter condition [10,1,2,5,8,3,9]));
(print(head [7,4,1]));
(print(head []));
(print(tail [7,4,1]));
(print(tail []));
(print(init []));
(print(init [1]));
(print(init [1,2,3,4,5]));
(print(foldr f 2 [1,3..10]));
(print(foldl f 5 [1,3..10]));
(print(splitAt 10 [1,2,3,4,5,6,4,5,6,7,8]));
(print((([1,2] `plusplus` [3,4]) `plusplus` [5])));
(print(condition 5));
(print(not (condition 5)));
}