]> gitweb.michael.orlitzky.com - spline3.git/blobdiff - src/Misc.hs
Add the 'disjoint' function.
[spline3.git] / src / Misc.hs
index b2ebeef53c42e470af7e12c58e5e55fdeac74a10..b9220cbbcefa7bf52ea9ec6c76b5f5d09467d4b6 100644 (file)
@@ -3,10 +3,21 @@
 module Misc
 where
 
+import Data.List (intersect)
+
 
 -- | The standard factorial function. See
 --   <http://www.willamette.edu/~fruehr/haskell/evolution.html> for
 --   possible improvements.
+--
+--   Examples:
+--
+--   >>> factorial 0
+--   1
+--
+--   >>> factorial 4
+--   24
+--
 factorial :: Int -> Int
 factorial n
     | n <= 1 = 1
@@ -16,10 +27,30 @@ 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
@@ -28,3 +59,19 @@ all_equal xs =
     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 == []