Аз съм изключително нов в 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);