gpt4 book ai didi

input - 在 Lisp 中读取定界输入

转载 作者:太空宇宙 更新时间:2023-11-03 18:47:00 26 4
gpt4 key购买 nike

在 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)

我遇到过 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 天大),而且我不确定性能影响(收集 在循环退出作用域后添加或反转列表?是否有更简单的方法来切断最后一个元素,或者干脆不添加它?)。

最佳答案

对于这种简单的情况,您可以在循环中使用read,收集到目前为止读取的结果并在最后两个为零时停止。

(defun read-double-zero-terminated-list (stream)
(do* ((prev -1 val)
(val (read stream) (read stream))
list)
((and (zerop prev) (zerop val)) (reverse (cdr list)))
(push val list)))

read-delimited-list 用于创建专门语法的情况,因此在这里可能有点矫枉过正。

关于input - 在 Lisp 中读取定界输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12292538/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com