gpt4 book ai didi

lisp - 在 CLISP 中并行迭代 2 个列表

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

我是新手,尝试并行迭代 2 个列表,如下所示:

(defun test-do* (l1 l2)
(do* ((temp1 l1 (cdr l1))
(var1 (car temp1) (car temp1))
(temp2 l2 (cdr l2))
(var2 (car temp2) (car temp2)))
((endp temp1) 'end-of-l1) ))

问题是我的代码中有一个无限循环,我不知道为什么。您的帮助将不胜感激。

最佳答案

我不确定你到底想做什么,但对你的代码的这种修改修复了无限循环:

(defun test-do* (l1 l2)
(do* ((temp1 l1 (cdr temp1))
(var1 (car temp1) (car temp1))
(temp2 l2 (cdr temp2))
(var2 (car temp2) (car temp2)))
((endp temp1) 'end-of-l1) ))

考虑 do* 循环中的语句之一:

(temp1 l1 (cdr l1))

翻译成英语(在 do* 循环的上下文中),这意味着:“这不是你想要的,因为 l1 的值永远不会改变,因此 temp1 在第一次迭代后的每次迭代中都被赋予相同的值。考虑以下修改:

(temp1 l1 (cdr temp1))

这意味着:“在第一次迭代中,将 temp1 设置为 l1 的值。在随后的每次迭代中,将 temp1 设置为(cdr temp1) 的值。”这样,每次迭代中 temp1 的值都取决于上一次迭代中 temp1 的值,并且您的循环会按预期遍历列表。

关于lisp - 在 CLISP 中并行迭代 2 个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15647345/

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