質問
OCamlのC ++メソッド istream :: putback(char)
と同等のものはありますか?
stdin の先頭に文字を追加するにはどうすればよいですか?
解決
in_channel
または Stream.t
を使用して実行することはできません。いくつかの提案があります:
-
読んだ文字を戻す場合、要素を削除する代わりに、
peek
を使用してストリームを調べることをお勧めします。 -
その関数へのC-Interfaceを直接書くのは少し運が良いかもしれません。これは本当に悪い考えだと思います。
-
代わりにアキュムレータの使用を検討しましたか?
-
現在の関数の周りに、ジッパー、スタック、または文字を押し戻すことができる他の構造の型でモジュールを記述します。
他のヒント
OCaml Batteries Included には、ストリーム用のより包括的で高レベルのインターフェイスが備わっています。これをご覧ください。さらに、一般に、それは良いことです。
基本的にはできません。バッテリー(およびExtlib)は拡張I / Oラッパーを提供しますが、どちらもこの機能をサポートしていません。
ただし、文字レベルの読み取りのみを行う場合は、バッテリーまたはExtlibでエミュレートできます。I/ Oストリームを Enum ( BatEnum とバッテリー」)。 Enumは、「次の値を取得」という一般的な列挙を提供します。インターフェースのタイプ。列挙値の前に値を戻すことができます。したがって、 Enum.next
関数で文字を返す char Enum.t
型の列挙型でstdinをラップしてから、 Enum.push
不要な文字を前面に押し戻す。
このような列挙型をで再ラップできる場合がありますIO ( BatIO )により、より柔軟なインターフェースが実現します。これらのモジュールが文字をプッシュするセマンティクスを台無しにする内部バッファリングを実行しないことを最初に確認した場合。