Операторы case и сопоставление с образцом

Я кодирую на SML для задания, я выполнил несколько практических задач, и мне кажется, что я чего-то упускаю - я чувствую, что использую слишком много case операторов. Вот что я делаю и формулировки проблем, с которыми у меня возникли проблемы. :

  1. Напишите функцию 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) 
     
  2. Напишите функцию 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

7
задан Gilles 'SO- stop being evil' 5 October 2012 в 17:53
поделиться