Я кодирую на 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 => НЕКОТОРЫЕ xs
| false => case all_except_option (str, xs) of
NONE => NONE
| НЕКОТОРЫЕ y => НЕКОТОРЫЕ (x :: y)
Напишите функцию get_substitutions1, которая принимает список строк (список строк, подстановок) и строку s и возвращает список строк . В результате все строки, которые есть в каком-либо списке подстановок, также имеют s, но самого s не должно быть в результате.
fun get_substitutions1 (lst: список списка строк, s: строка) =
case lst of
[] => []
| x :: xs => case all_except_option (s, x) of
NONE => get_substitutions1 (xs, s)
| НЕКОТОРЫЕ y => y @ get_substitutions1 (xs, s)
-
same_string
- это предоставленная функция,
fun same_string (s1 : строка, s2: строка) = s1 = s2