У меня есть два списка, которые содержат коэффициенты для двух разных полиномов, и я хочу написать функцию, которая может их умножать (например, F-O-I-L).SML - Коэффициенты умножения многочленов
Функция, которую я написал, не является полной, однако я просто использовал ее, чтобы проверить свое понимание того, как она должна работать.
fun polyMult(nil, nil) = nil
| polyMult(M as x::xs, N as y::ys) =
(x * y)::polyMult(xs, ys);
Есть ли я на правильном пути?
Кроме того, у меня есть сообщение об ошибке uncaught exception Match [nonexhaustive match failure]
Что это значит?
Я попытался изменить мою функцию, которая должна взять 'hd (M)' и умножить ее на 'hd (N)' для каждого рекурсивного вызова 'polyMult' =>' fun polyMult (M, N) = (hd (M) * hd (N)) :: polyMult (M, tl (N)), однако я просто получаю конкатенацию N @ M. – Delfino
@mynorka Это определение не имеет базового случая, поэтому оно Не работай. Поскольку вы выполняете сопоставление с образцом, вы можете использовать 'x :: xs' и' y :: ys', как и в вопросе, вам не нужно использовать 'hd' и' tl'. – joom
Я все еще получаю вывод только двух списков, объединенных. Есть ли специальная функция для 'lists' для умножения двух элементов вместе? – Delfino