2016-05-12 22:26:52 -04:00
|
|
|
module Sublist exposing (..)
|
2016-03-16 21:38:51 -04:00
|
|
|
|
2015-10-12 09:46:15 -07:00
|
|
|
|
2016-04-12 13:54:11 -07:00
|
|
|
version : Int
|
|
|
|
version =
|
|
|
|
2
|
|
|
|
|
|
|
|
|
2016-04-09 20:15:51 -07:00
|
|
|
type ListComparison
|
|
|
|
= Equal
|
|
|
|
| Superlist
|
|
|
|
| Sublist
|
|
|
|
| Unequal
|
2016-03-16 21:38:51 -04:00
|
|
|
|
2016-04-09 20:15:51 -07:00
|
|
|
|
|
|
|
sublist : List a -> List a -> ListComparison
|
2015-10-12 09:46:15 -07:00
|
|
|
sublist alist blist =
|
2016-03-16 21:38:51 -04:00
|
|
|
if alist == blist then
|
2016-04-09 20:15:51 -07:00
|
|
|
Equal
|
2016-03-16 21:38:51 -04:00
|
|
|
else if inList alist blist then
|
2016-04-09 20:15:51 -07:00
|
|
|
Superlist
|
2016-03-16 21:38:51 -04:00
|
|
|
else if inList blist alist then
|
2016-04-09 20:15:51 -07:00
|
|
|
Sublist
|
2016-03-16 21:38:51 -04:00
|
|
|
else
|
2016-04-09 20:15:51 -07:00
|
|
|
Unequal
|
2016-03-16 21:38:51 -04:00
|
|
|
|
2015-10-12 09:46:15 -07:00
|
|
|
|
|
|
|
inList : List a -> List a -> Bool
|
|
|
|
inList alist blist =
|
2016-03-16 21:38:51 -04:00
|
|
|
let
|
|
|
|
getLastInList sublist =
|
2016-04-09 20:15:51 -07:00
|
|
|
Maybe.withDefault [] (List.tail sublist)
|
2015-10-12 09:46:15 -07:00
|
|
|
in
|
2016-03-16 21:38:51 -04:00
|
|
|
if (List.length alist) < (List.length blist) then
|
|
|
|
False
|
|
|
|
else if (List.take (List.length blist) alist) == blist then
|
|
|
|
True
|
|
|
|
else
|
|
|
|
inList (getLastInList alist) blist
|