在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),这使得我的另一个大功能从未结束。