А вот и другое:

вления

функция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);

Ответы на вопрос(1)

Ваш ответ на вопрос