Common Lisp では、実数のリストの形式でユーザー入力をキャプチャする必要があります。このリストは、連続する 2 つのゼロで終了します。たとえば5.0 0 6.0 3 2.0 5 1.0 7 13.0 8 0 0
、 list を返す必要があります(5.0 0 6.0 3 2.0 5 1.0 7 13.0 8)
。
私は関数に出くわしましたread-delimited-list
、これは単一の文字を終点として受け取ります。単一のゼロで停止することはできますが、この関数を展開する方法がわかりません。また、char の代わりに区切られた文字列を取る別の関数も知りません。
編集受け入れられた回答のおかげで、私は以下を開発しました:
(butlast (loop for y = -1 then x for x = (read stream) until (and (= 0 x) (= 0 y))
collect x)))
私にはもう少し読みやすいように思えます (そして、この時点で、私の Lisp の目はわずか 3 日しか経っていないことを公然と認めています)、パフォーマンスへの影響についてはわかりません (collect
ループがスコープを終了した後にリストを追加または反転します) ? 最後の要素を切り落とす、または単純に追加しない簡単な方法はありますか?)。