Funções recursivas nos objetos OCAML
Pergunta
Estou tentando descobrir a recursão para o OCAML no contexto do método de um objeto. Eu tentei o código a seguir, mas não consigo compilar.
class foo =
object (self)
method loopTest =
let rec doIt x =
Printf.printf "%d\n" x;
if x>1 then doIt (x+1)
end;;
Como faço para criar uma função recursiva desse tipo dentro de um método?
Código revisado:
class foo =
object (self)
method loopTest =
let rec doIt x =
Printf.printf "%d\n" x;
if x<10 then doIt (x+1) in doIt 0
end;;
Solução
Você ainda precisa ligar para o DOIT no seu método Looptest. let
Apenas define doit, assim como method
Apenas define um método e não o chama. O compilador detecta isso porque não sabe o que retornar do looptest (como um método que não possui o tipo de retorno, mas não tem implementação em C# ou Java).
Além disso, você está em um loop infinito com este código, talvez if x>1 then doIt (x-1)
Seguido por doIt 100
é uma ideia melhor.
Outras dicas
Meu OCAML está enferrujado, mas acho que não vamos avaliar o que vinculou. Se você deseja que o TestLoop ligue para o DOIT, adie um noit ou similar.
Dois loops infinitos no mesmo código;), você deve aprender sobre iteradores, eu acho;)