summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--h16.hs2
-rw-r--r--h17.hs10
-rw-r--r--h18.hs7
-rw-r--r--h19.hs6
4 files changed, 25 insertions, 0 deletions
diff --git a/h16.hs b/h16.hs
new file mode 100644
index 0000000..68978a7
--- /dev/null
+++ b/h16.hs
@@ -0,0 +1,2 @@
+dropEvery :: [a] -> Int -> [a]
+dropEvery xs c = [x| (x,y) <- (zip xs [1..]), y `mod` c /= 0 ]
diff --git a/h17.hs b/h17.hs
new file mode 100644
index 0000000..fa26f35
--- /dev/null
+++ b/h17.hs
@@ -0,0 +1,10 @@
+split :: [a] -> Int -> ([a],[a])
+split xs c = splitHelper [] xs c
+ where
+ splitHelper pre nxt 0 = (reverse pre, nxt)
+ splitHelper pre (x:nxt) c = splitHelper (x:pre) nxt (c-1)
+
+split' (x:xs) c | c>0 =
+ let (pre,nxt) = split' xs (c-1)
+ in (x:pre,nxt)
+split' xs _ = ([],xs)
diff --git a/h18.hs b/h18.hs
new file mode 100644
index 0000000..b9e8192
--- /dev/null
+++ b/h18.hs
@@ -0,0 +1,7 @@
+slice :: [a] -> Int -> Int -> [a]
+slice (x:xs) a b
+ | a > 1 = slice xs (a-1) (b-1)
+ | a <= 1 && b >= 1 = x:(slice xs (a-1) (b-1))
+ | otherwise = []
+
+slice' xs i j = [x | (x,k)<- (zip xs [1..j]) , k >= i]
diff --git a/h19.hs b/h19.hs
new file mode 100644
index 0000000..45c5a07
--- /dev/null
+++ b/h19.hs
@@ -0,0 +1,6 @@
+rotate :: [a] -> Int -> [a]
+rotate xs c
+ | c < 0 = rotate xs (c + (length xs))
+ | otherwise = (drop (c `mod` (length xs)) xs ) ++ (take (c `mod` (length xs)) xs)
+
+rotate' xs c = take (length xs) $ drop (length xs + c) $ cycle xs