yajis_narif 发表于 2022-7-6 09:32:24

Lisp的第二个循环不工作

嗨!!
我的程序假设在2个列表(ptinslist和li)中循环以应用翻译函数。。第一个循环有效,但k循环无效
 
plzz帮助
 
(setq k 0)
(setq j 0)
 
(虽然(
(而(
 
(setq tran(翻译(第n k个ptinslist)(第n个j li)))
 
(setq nvlist(append nvlist(list tran)))
(setq j(+j 1))
 
)
 
(setq all(append all(list nvlist)))
 
 
(setq k(+k 1))
)

Tiger 发表于 2022-7-6 09:36:28

我已经把你帖子的标题改成了更具描述性的标题,请以后使用更具描述性的标题,这会有所帮助。

alanjt 发表于 2022-7-6 09:41:18

您的代码片段相当混乱,但我认为您可以使用mapcar+lambda实现您想要的。
 
如。
(mapcar '(lambda (a b) (translate a b))
       ptinlist
       li
)
 
顺便说一句,translate不是原生函数,所以我假设它是您编写的函数。如果你想要的是trans,那么你需要三个参数,而不是两个。

yajis_narif 发表于 2022-7-6 09:42:43

好的,老虎,我会的,谢谢
 
alanjit yes translate是一个函数:
 
(defun translate(pt1 pt2/)
(mapcar’+pt1 pt2)
 
但是我需要循环两个列表(两个列表的长度是4)

alanjt 发表于 2022-7-6 09:47:35

(mapcar '(lambda (a b) (apply 'mapcar (cons '+ (list a b))))
       ptinlist
       li
)

SOliver 发表于 2022-7-6 09:50:50

如果你打算继续使用你的原始代码,我建议它的编写类似于下面的内容-用于neatnes等。
在这一点上,我支持alanjt,因为你在遍历列表,尽管我认为需要这样做
这取决于您试图实现的目标:如果您试图将LCORD中的每个点与Lins中的每个点进行转换,那么上面的mapcar集群可能就是您想要的。如果您试图针对每个列表各自的坐标运行translate,例如
然后你想接受alanjt的建议——我相信这就是你想要的;您收到的代码正在尝试执行我提供的解决方案。
 
希望有帮助
 
编辑:在有人开枪打我之前;所有代码都是在响应线程区域编写的,因此没有经过测试。除了可能出现额外的右括号或语法错误外,该原则是合理的。

alanjt 发表于 2022-7-6 09:54:22

如果使用子程序,我认为应该如下所示:
 
5

yajis_narif 发表于 2022-7-6 09:56:35

谢谢大家,我会试试这个并回复
对于我尝试执行的代码:
 
(setq lins(列表0 10 20))
(setq LCORD(列表5 60 80))
;示例点
(翻译(第n个0 lins)(第n个0 LCORD))
(翻译(第n个0 lins)(第n个1 LCORD))
(翻译(第n个0 lins)(第n个2 LCORD))
 
(翻译(第n个1 lins)(第n个0 LCORD))
(翻译(第n个1 lins)(第n个1 LCORD))
(翻译(第n个1 lins)(第n个2 LCORD))
 
(翻译(第n个2 lins)(第n个0 LCORD))
(翻译(第n个2 LIN)(第n个1 LCORD))
(翻译(第n个2 lins)(第n个2 LCORD))

alanjt 发表于 2022-7-6 10:00:26

我很困惑,这是一个点列表还是一个整数列表?
 
点:'((0.0.0。)(0. 1. 1.) (1. 1. 1.))
整数:'(0 1 2 3 4 5 6)

yajis_narif 发表于 2022-7-6 10:03:13

no i'ts a list of points actually they are coordinate不,i'ts a list of points,实际上它们是坐标
页: [1] 2
查看完整版本: Lisp的第二个循环不工作