diff --git a/exercises/practice/sublist/.meta/example.sml b/exercises/practice/sublist/.meta/example.sml index c1a5c32..f80beb8 100644 --- a/exercises/practice/sublist/.meta/example.sml +++ b/exercises/practice/sublist/.meta/example.sml @@ -5,10 +5,14 @@ datatype relation = | Unequal local + fun isPrefix (listOne: int list, listTwo: int list): bool = + case (listOne, listTwo) of + (nil, _) => true + | (_, nil) => false + | (firstOne :: restOne, firstTwo :: restTwo) => firstOne = firstTwo andalso isPrefix (restOne, restTwo) + fun isSublist (listOne: int list, listTwo: int list): bool = - if length listTwo < length listOne then false - else if listOne = List.take (listTwo, length listOne) then true - else isSublist (listOne, tl listTwo) + isPrefix (listOne, listTwo) orelse (listTwo <> nil andalso isSublist (listOne, tl listTwo)) in fun sublist (listOne: int list, listTwo: int list): relation = if listOne = listTwo then Equal