OCaml факториальная функция с ограничениями - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь изучать OCaml самостоятельно, и я достиг императивного программирования.Я нашел это маленькое упражнение, которое я просто застрял на том, как даже приблизиться.Это кажется таким простым, но я думаю, что моего понимания просто не хватает.

Проблема просит меня написать функцию для факториала без использования ключевого слова rec и без циклов.Это должно научить меня модели среды, но это также смущает меня.

Моей первой мыслью было попробовать что-то вроде этого:

   let factorial = 
       let f = ref (fun n -> 0) in  
       let temp_factorial n =
           if n = 0
               then 1
           else
               begin 
                   f := n * !f*(n-1)
                   !f
               end

Но я не уверен, работает ли это.Любая помощь будет принята с благодарностью:)

1 Ответ

0 голосов
/ 19 марта 2019

Ваш код немного странный и неправильный, но основная идея работоспособна. Если у вас есть ссылка f на функцию типа int -> int, вы можете свободно использовать !f в следующем коде. Фактически вы можете назначить f, так что это относится к функции, которая использует !f. Это эквивалентно рекурсии, но использует императивную часть OCaml.

let f = ref (fun n -> n + 1)

f := 
    (fun n ->
    if n < 2 then 1
    else (* ... left as an exercise ... *)
    )

let factoral n = !f n

Ключ в том, что деталь left as an exercise может использовать !f.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...