

read-char-no-hangのシークエンス版 read-sequence-no-hangを作りたいのですが、可能でしょうか。

一番、シンプルな実装は以下のようなものになると思います。

[code]

    (defun read-sequence-no-hang (seq stream &rest rest)
      (when (listen stream)
        (apply #'read-sequence seq stream rest)))
    
[/code]

しかし、上記のような実装では、読み込み不可能な状態(ストリーム中にデータは存在しないがEOFではない状態)と、EOFを区別できません。  
かといって、read-char-no-
hangをシークエンスのサイズ分繰り返すような実装なら、EOF判定が可能だと思われますが、効率が悪そうです（加えてあんまり美しくもありません）。

可能ならCommon lispの仕様の範囲で実装できたらいいと思います。

よろしくお願いいたします。


CC BY-SA 3.0
2016-03-14T11:54:00.293
23126
2016-03-14T12:06:19.010
2016-03-14T12:06:19.010
5970
5970
question
common-lisp
read-sequence-no-hangの実装