Pergunta

existe um equivalente para o C ++ istream::putback(char) método para OCaml?

Como eu poderia adicionar um personagem para o início da stdin ?

Foi útil?

Solução

Você não pode fazer isso com um in_channel ou com Stream.t. Aqui estão algumas sugestões:

  1. Se você está colocando de volta um personagem que tinha lido, você pode querer usar uso peek para examinar o fluxo em vez de remover o elemento.

  2. Você pode ter um pouco de sorte escrevendo um C-interface para essa função diretamente. Eu posso ver este ser uma péssima idéia.

  3. Você já pensou em usar um acumulador vez?

  4. Escrever um módulo em torno das funções atuais com um tipo que é um zíper ou pilha ou alguma outra estrutura que permite empurrar personagens de volta.

Outras dicas

OCaml baterias incluídas apresenta uma interface muito mais abrangente e muito mais elevado nível de riachos. Você poderia dar uma olhada nisso. Além disso, em geral, é bom.

Basicamente: você não pode. Baterias (e Extlib) fornecer uma melhorada I / O invólucro, mas nenhum deles suportam esta função.

Você pode, no entanto, imitá-lo com baterias ou Extlib se você estiver disposto a fazer único personagem de nível lê, bu envolvendo o fluxo de I / O em uma Enum ( BatEnum com baterias). Enum fornece uma enumeração geral com um tipo de "ficar próximo valor" da interface, e permite que você empurrar valores de volta para a frente do enum. Então você pode quebrar stdin em uma enumeração de char Enum.t tipo que retorna personagens com a sua função Enum.next, e depois usar Enum.push para empurrar os caracteres indesejados de volta para a frente.

Pode ser possível, então, re-embrulhar tal enum com IO ( BaTiO ) para uma interface mais flexível, se você procurar verificar que esses módulos não executar o buffer interno que iria atrapalhar a semântica de empurrar caracteres.

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