在CLISP中并行迭代2个列表
我是新手,尝试并行迭代两个列表,如下所示:在CLISP中并行迭代2个列表,lisp,common-lisp,Lisp,Common Lisp,我是新手,尝试并行迭代两个列表,如下所示: (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 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 */c>循环)的上下文中,这意味着:“这不是你想要的,因为<代码> L1 < /代码>的值永远不会改变,所以<代码> Tun1在第一次后的每次迭代中被赋予相同的值。
(temp1 l1 (cdr temp1))
这意味着:“在第一次迭代中,将
temp1
设置为l1
的值。在随后的每次迭代中,将temp1
的值设置为(cdr temp1)
。“这样,每次迭代中temp1
的值取决于上一次迭代中temp1
的值,您的循环会像您预期的那样逐步遍历列表。我不确定您到底想做什么,但对代码的此修改修复了无限循环:
(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 */c>循环)的上下文中,这意味着:“这不是你想要的,因为<代码> L1 < /代码>的值永远不会改变,所以<代码> Tun1在第一次后的每次迭代中被赋予相同的值。
(temp1 l1 (cdr temp1))
这意味着:“在第一次迭代中,将temp1
设置为l1
的值。在每个后续迭代中,将temp1
的值设置为(cdr temp1)
“这样,每个迭代中temp1
的值取决于上一次迭代中temp1
的值,并且您的循环会像预期的那样逐步遍历列表。(循环x in'(a b c d e)
对于y英寸(1 2 3 4 5)
收集(列表x y))
((a1)(b2)(c3)(d4)(e5))的循环
对于y英寸(1 2 3 4 5)
收集(列表x y))
((A 1)(B 2)(C 3)(D 4)(E 5))我确实理解你说的话,但我不知道do*做什么。这只是一个小错误(应该是temp1而不是l1),这导致我的另一个大功能从未结束。我确实理解你说的话,但我不知道do*做什么。这只是一个小错误(应该是temp1而不是l1),这使得我的另一个大功能从未结束。