X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FMisc.hs;h=b9220cbbcefa7bf52ea9ec6c76b5f5d09467d4b6;hb=173d34c0d529830efeab39b7cca9a03856514469;hp=6364e95e2c6f3b97794a609bbc7df6c40bd9b65a;hpb=89b8b6e94fcc944a1f4611811265f3c6217af850;p=spline3.git diff --git a/src/Misc.hs b/src/Misc.hs index 6364e95..b9220cb 100644 --- a/src/Misc.hs +++ b/src/Misc.hs @@ -3,10 +3,21 @@ module Misc where +import Data.List (intersect) + -- | The standard factorial function. See -- for -- possible improvements. +-- +-- Examples: +-- +-- >>> factorial 0 +-- 1 +-- +-- >>> factorial 4 +-- 24 +-- factorial :: Int -> Int factorial n | n <= 1 = 1 @@ -16,5 +27,51 @@ factorial n -- | Takes a three-dimensional list, and flattens it into a -- one-dimensional one. +-- +-- Examples: +-- +-- >>> flatten [ [[1,2], [3,4]], [[5,6], [7,8]] ] +-- [1,2,3,4,5,6,7,8] +-- flatten :: [[[a]]] -> [a] flatten xs = concat $ concat xs + + +-- | Switch the x and z dimensions of a three-dimensional list. +transpose_xz :: [[[a]]] -> [[[a]]] +transpose_xz [] = [] +transpose_xz [[]] = [[]] +transpose_xz [[[]]] = [[[]]] +transpose_xz m = + [[[ m !! x !! y !! z | x <- [0..xsize]] + | y <- [0..ysize]] + | z <- [0..zsize]] + where + zsize = (length m) - 1 + ysize = length (head m) - 1 + xsize = length (head $ head m) - 1 + +-- | Takes a list, and returns True if its elements are pairwise +-- equal. Returns False otherwise. +all_equal :: (Eq a) => [a] -> Bool +all_equal xs = + all (== first_element) other_elements + where + first_element = head xs + other_elements = tail xs + + +-- | Returns 'True' if the lists xs and ys are disjoint, 'False' +-- otherwise. +-- +-- Examples: +-- +-- >>> disjoint [1,2,3] [4,5,6] +-- True +-- +-- >>> disjoint [1,2,3] [3,4,5] +-- False +-- +disjoint :: (Eq a) => [a] -> [a] -> Bool +disjoint xs ys = + intersect xs ys == []