module Misc
where
+import Data.List (intersect)
+
-- | The standard factorial function. See
-- <http://www.willamette.edu/~fruehr/haskell/evolution.html> for
-- | 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
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 == []