Вы можете использовать явную рекурсию, чтобы пройти по списку коэффициентов, возвести в степень основание и подвести итог.
fun eval r =
let fun step (power, sum) (coeff :: rest) =
step (power * r, sum + coeff * power) rest
| step (_, sum) nil = sum
in step (1, 0)
end
Конструктивно это похоже на складку, и становится понятнее, если мы заменим ее на одну.
fun eval r lst =
let fun step (coeff, (power, sum)) = (power * r, sum + coeff * power)
val (_, sum) = foldl step (1, 0) lst
in sum
end
Вы можете изменить порядок операций, чтобы использовать схему Хорнера, как упомянуто в комментарии KennyTM: это приведет к ответу sepp2k, который требует вдвое меньше умножений, но использует больше места в стеке.