Um problema que tive enquanto fazia o Catalogador de discos (CD) foi na inexistência de uma função que verificasse se todos os elementos de um determinado conjunto faziam parte de um outro conjunto, interessando a ordem.
Exemplificando:
Imaginando que existe uma função f
temos,
f [1,9,8,5] [3,4,5,1,3,4,7,8,94,3,1,9,8,5,2,2,2,15,24] terá que originar o resultado
True
.
Encontrei esta solução, se tiverem uma ideia melhor estou receptivo.
{-# OPTIONS -fglasgow-exts #-}
module Main where
import List
contain :: (Eq [a] , Eq a) => [a] -> [a] -> Bool contain s1 s2 | null s1 || null s2 = False contain s1@(h:_) s2 = let len = length s1 elems = elemIndices h s2 in (or . map (==s1)) [take len $ drop n s2 | n <- elems ]