Я чрезвычайно новичок в SML, и мы только что получили первое задание по программированию для класса, и мне нужно немного понять.
Вопрос состоит в том, чтобы написать функцию ML под названием minus: int list * int list -> int list
, которая принимает два неубывающих целочисленных списка и создает неубывающий целочисленный список, полученный путем удаления элементов из первого входного списка, которые также находятся во втором список ввода.
Например,
minus( [1,1,1,2,2], [1,1,2,3] ) = [1,2]
minus( [1,1,2,3],[1,1,1,2,2] ) = [3]
Вот моя попытка ответить на вопрос. Может кто-нибудь сказать мне, что я делаю неправильно? Я не совсем понимаю парсинг списков.
fun minus(xs,nil) = []
| minus(nil,ys) = []
| minus(x::xs,y::ys) = if x=y then minus(xs,ys) else x :: minus(x,ys);
Вот исправление, которое я только что сделал, я думаю, что это сейчас?
fun minus(L1,nil) = L1
| minus(nil,L2) = []
| minus(L1,L2) = if hd(L1) > hd(L2) then minus(L1,tl(L2))
else if hd(L1) = hd(L2) then minus(tl(L1),tl(L2))
else hd(L1) :: minus(tl(L1), L2);