я делаю что-то на самом деле основной неправильно, но я не могу, для жизни меня, выяснить, что это такое ...Выполнение функции с рекурсивной F #
let rec testItSeveralTimes (test, times) =
printfn "Iterations to go %O" times
match times with
| 0 ->()
| _ ->
test
testItSeveralTimes (test, (times - 1))
testItSeveralTimes ((printfn "Running a test"), 2)
Что я ожидаю:
Iterations to go 2
Running a test
Iterations to go 1
Running a test
Iterations to go 0
Running a test
val it : unit =()
Что я получаю:
Running a test
Iterations to go 2
Iterations to go 1
Iterations to go 0
val it : unit =()
Похоже, что функция оценивается один раз, в самом начале, а затем игнорируются.
Этот вопрос (Wrapping a function with an indeterminate number of parameters in F#), казалось, получил ответ, но нет.
Я изменил его на это: пусть Rec testItSeveralTimes (тест, раз) = printfn "Iterations идти% O" раз время матча с | 0 ->() | _ -> тест() testItSeveralTimes (тест, (раз - 1)) testItSeveralTimes ((FUN _ -> printfn "Запуск теста"), 2) И это работает, но я не знаю, почему. Это потому, что test() заставляет его оцениваться как функция? –