Я бы рассмотрел это по-другому. Например, вы могли бы написать одну функцию, которая просто умножает, не беспокоясь о переносе, а затем вторую функцию, которая обрабатывает перенос.
Как предлагает Джеффри, вы также можете поменять цифры, как правило, или просто по мере необходимости. Хотя вам, по-видимому, запрещено использовать функцию List.reverse, вы можете реализовать ее самостоятельно в одной строке кода.
О, и ради эффективности и / или хороших привычек вам, вероятно, следует переписать части, которые говорят [one value]@list
, чтобы вместо них сказать (one value)::list
. Они будут делать то же самое, и второй будет быстрее первого (если компилятор не достаточно умен, чтобы выполнить эту замену для вас, какой она может быть, и в этом случае это будет та же скорость).