Я пишу код на SML для задания, решил несколько практических задач и чувствую, что что-то упускаю — мне кажется, что я использую слишком много операторов case
. Вот что я делаю, и формулировки проблем, с которыми у меня проблемы.:
Напишите функцию all_except_option, которая принимает строку и список строк. Вернуть NONE, если строки нет в списке, иначе вернуть SOME lst, где lst подобен списку аргументов, за исключением того, что в нем нет строки.
fun all_except_option(str : string, lst : string list) = case lst of [] => NONE | x::xs => case same_string(x, str) of true => SOME xs | false => case all_except_option(str, xs) of NONE => NONE | SOME y=> SOME (x::y)
Напишите функцию get_substitutions1, которая принимает список строк list (список строк, подстановок) и строку s и возвращает список строк. В результате есть все строки, которые есть в каком-то списке в подстановках, в которых тоже есть s, но самой s не должно быть в результате.
fun get_substitutions1(lst : string list list, s : string) = case lst of [] => [] | x::xs => case all_except_option(s, x) of NONE => get_substitutions1(xs, s) | SOME y => y @ get_substitutions1(xs, s)
- same_string
- предоставленная функция, fun same_string(s1 : string, s2 : string) = s1 = s2