在 Common Lisp 中,我需要以实数列表的形式捕获用户输入。该列表以连续两个零结束。例如,5.0 0 6.0 3 2.0 5 1.0 7 13.0 8 0 0
应该返回列表(5.0 0 6.0 3 2.0 5 1.0 7 13.0 8)
。
我遇到了 function read-delimited-list
,它以单个字符作为结束点。我可以停在一个零处,但我不确定如何扩展这个函数,而且我不知道另一个函数采用分隔字符串而不是字符。
编辑感谢接受的答案,我开发了以下内容:
(butlast (loop for y = -1 then x for x = (read stream) until (and (= 0 x) (= 0 y))
collect x)))
它对我来说似乎更具可读性(此时我公开承认我的 Lisp 眼睛只有 3 天),而且我不确定性能影响(collect
在循环退出范围后追加或反转列表? 有没有更简单的方法来切掉最后一个元素,或者干脆不附加它?)。