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;;
Foi útil?

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;)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top