初学者 LISP:我可以在 Do 循环的哪个阶段执行 IF 条件?
Beginner LISP: At what stage in a Do Loop can I implement an IF condition?
我正在设计一个简单的函数(针对 class,所以请不要为您完成完整的答案),returns 是列表中的第一个奇数,或者 'none 如果有none.
我有一个查找奇数的工作代码:
(defun first-odd (lst)
(do ((numbers lst (cdr numbers)))
((oddp (car numbers)) (car numbers))))
但我似乎无法弄清楚的是,如果列表只有偶数 #s,或者可能是 NIL,那么将 IF 条件(赋值所必需的)放在哪里以生成 "NONE"。
我是否将 DO 本身的退出点设为 IF 条件?还是 before/after?
我正在做这样的事情(虽然我觉得这是错误的):
(defun first-odd (lst)
(do ((numbers lst (cdr numbers)))
((if (oddp (car numbers))
(car numbers)
(print 'none)))))
或者有人可以在 'where' 上建议我放置 IF 吗?对于真正的初学者来说很抱歉,但是教授没有提供太多关于 DO 的文档,我整个周末都在摸不着头脑。提前致谢。
DO 接受三个参数:第一个是变量列表及其初始值和后续值;第二个是终止条件,即何时退出循环,结果为return;第三个是循环体,它是可选的。
第二个元素包含隐含的 if.
您的第一个代码看起来不错,但有一个例外:您是否考虑过如果列表中没有奇数元素会发生什么情况?然后您需要测试列表的末尾(即当列表为 nil 时)。然后,结果将取决于您是否因为找到奇数或 nil 列表而退出循环。那就是你可以使用 IF.
的地方
我正在设计一个简单的函数(针对 class,所以请不要为您完成完整的答案),returns 是列表中的第一个奇数,或者 'none 如果有none.
我有一个查找奇数的工作代码:
(defun first-odd (lst)
(do ((numbers lst (cdr numbers)))
((oddp (car numbers)) (car numbers))))
但我似乎无法弄清楚的是,如果列表只有偶数 #s,或者可能是 NIL,那么将 IF 条件(赋值所必需的)放在哪里以生成 "NONE"。 我是否将 DO 本身的退出点设为 IF 条件?还是 before/after?
我正在做这样的事情(虽然我觉得这是错误的):
(defun first-odd (lst)
(do ((numbers lst (cdr numbers)))
((if (oddp (car numbers))
(car numbers)
(print 'none)))))
或者有人可以在 'where' 上建议我放置 IF 吗?对于真正的初学者来说很抱歉,但是教授没有提供太多关于 DO 的文档,我整个周末都在摸不着头脑。提前致谢。
DO 接受三个参数:第一个是变量列表及其初始值和后续值;第二个是终止条件,即何时退出循环,结果为return;第三个是循环体,它是可选的。
第二个元素包含隐含的 if.
您的第一个代码看起来不错,但有一个例外:您是否考虑过如果列表中没有奇数元素会发生什么情况?然后您需要测试列表的末尾(即当列表为 nil 时)。然后,结果将取决于您是否因为找到奇数或 nil 列表而退出循环。那就是你可以使用 IF.