\documentclass[a4paper]{article} \usepackage{haskell} \pagestyle{myheadings} \begin{document} %%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Not building the Suffix List} Why not calculate cliques directly, instead of going way of the suffix list/array? Here goes: \begin{code} module Clix where import Suffix (Suffix) import Indexed import Gene -- | clix calculates the cliques resulting from sorting to a specific depth clix :: Int -> [[Suffix]] -> [[Suffix]] clix i = clix' 0 i -- | takes current offset and target offset and sorts the suffixes -- to the target depth. -- fixme: seems to cause a stack overflow if cliques become large(?) clix' :: Int -> Int -> [[Suffix]] -> [[Suffix]] clix' cur tgt (s:ss) = if cur == tgt then (s:ss) else (clix' (cur+1) tgt (filter (\x -> length x > 1) [as,cs,gs,ts])) ++ clix' cur tgt ss where (as,cs,gs,ts) = clix1' cur ([],[],[],[]) s clix' _ _ [] = [] -- split the list according to nucleotide in position p clix1' p (a,c,g,t) [] = (a,c,g,t) clix1' p (a,c,g,t) (x:xs) | p > len x = clix1' p (a,c,g,t) xs | otherwise = case (x ?? p) of A -> clix1' p (x:a,c,g,t) xs C -> clix1' p (a,x:c,g,t) xs G -> clix1' p (a,c,x:g,t) xs T -> clix1' p (a,c,g,x:t) xs _ -> clix1' p (a,c,g,t) xs \end{code} \end{document}