А вот и другое:
вления
функцияexpand
который получает список любого типа и целое числоn
и возвращает список, в котором реплицируется каждый элемент списка вводаn
раз. Например, расширение [1,2,3] 3 должно быть оценено как [1,1,1,2,2,2,3,3,3]. Тип функции должен быть «список → int →» список.
Вот мое решение, где я немного обманул требования, имея две функции. То, с чем я борюсь, это сбросn
к исходному значению, когда я перехожу к следующему элементу в списке. Я делаю это в своей реализации, сохраняя оригиналn
значение дляs
который никогда не меняется. Как мне избавиться от необходимостиs
?
fun duplicate([], n, s) = [] |
duplicate(l, n, s) =
if n > 1 then hd l::duplicate(l, (n-1), s)
else hd l::duplicate(tl l, s, s);
fun expand([], n) = [] |
expand(l, n) = duplicate(l, n, n);