Make a function which returns the original list except the argument
- by Alex
I want make a function which takes a list of string and a string and returns NONE if there is no string in the string list, otherwise it returns SOME of the list of string which is the same as the original list of string except it doesn't contain the initial string (pattern):
fun my_function (pattern, source_list) =
case source_list
of [] => NONE
| [x] => if pattern = x then SOME [] else NONE
| x::xs =>
if pattern = x
then SOME (xs)
else SOME (x) :: my_function (pattern, xs) (* this is wrong, what to do here?*)
val a = my_function ("haha", ["12", "aaa", "bbb", "haha", "ccc", "ddd"]) (* should be SOME ["12", "aaa", "bbb", "ccc", "ddd"]*)
val a2 = my_function ("haha2", ["123", "aaa", "bbb", "haha", "ccc"]) (*should be NONE*)
val a3 = my_function ("haha3", ["haha3"]) (* should be SOME []*)
I'm confused by the 3rd case: x::xs => .... What should do there?
Note that I'd like not to use any sml library function.