read-sequence-no-hangの実装
read-char-no-hangのシークエンス版 read-sequence-no-hangを作りたいのですが、可能でしょうか。
一番、シンプルな実装は以下のようなものになると思います。
(defun read-sequence-no-hang (seq stream &rest rest)
(when (listen stream)
(apply #'read-sequence seq stream rest)))
しかし、上記のような実装では、読み込み不可能な状態(ストリーム中にデータは存在しないがEOFではない状態)と、EOFを区別できません。
かといって、read-char-no-hangをシークエンスのサイズ分繰り返すような実装なら、EOF判定が可能だと思われますが、効率が悪そうです(加えてあんまり美しくもありません)。
可能ならCommon lispの仕様の範囲で実装できたらいいと思います。
よろしくお願いいたします。