Есть, по крайней мере, две проблемы, это помогло бы узнать, какова цель, кроме рекурсии.
Чтобы запустить его, вам нужно изменить третью строку. n_times
определяется с тремя входами, поэтому его нужно вызывать с тремя. Также определена функция, позволяющая принимать общий, целочисленный и общий ввод и выводить общий тип.
Вы можете удалить (f v)
и ввести только v
каждый l oop,
# let rec n_times (f, n, v) =
if n > 0 then
n_times (f , n-1 , v)
else
v;;
val n_times : 'a * int * 'b -> 'b = <fun>
# n_times(2,3,4);;
- : int = 4
Однако это всегда будет возвращать только v в конце.
Вы также можете заменить (f v)
списком и добавлять в него каждый префикс l oop,
# let rec n_times (f, n, v) =
if n > 0 then
n_times (f , n-1 , f::v)
else
v;;
val n_times : 'a * int * 'a list -> 'a list = <fun>
# n_times(2,3,[4]);;
- : int list = [2; 2; 2; 4]
# n_times(2,5,[4]);;
- : int list = [2; 2; 2; 2; 2; 4]
Это позволяет увеличивать список с каждым l oop.