使循环返回结果
大家好,只是尝试将点列表传递给“pline”命令。
问题是,虽然在例程中计算,但点数最初是未知的。
以下代码(以smth开头)进化出已知数量的点。
(defun c:pltest6 ()
(setq pts (list '(0 0) '(0 10) '(10 10) '(10 20) '(20 20) '(20 30) '(30 30)))
(setq ptqty 7)
(setq ptnum 0)
(command "pline"
(car pts)
(pt_retr pts)
(pt_retr pts)
(pt_retr pts)
(pt_retr pts)
(pt_retr pts)
(pt_retr pts)
""
)
)
(defun pt_retr (lst)
(setq ptnum (1+ ptnum))
(repeat ptnum
(setq lst (cdr lst))
)
(setq pt (car lst))
)
Repeat/foreach不执行,因为它们返回上一次迭代的值。。
现在我的Q是,
是否可以修改上述代码以使用循环,而不是重复同一行(此外,次数未知),
或者其他更愿意修复任务的方法?
提前感谢您,
Dmitro公司
(defun c:FOO (/ _FOO pts)
(defun _FOO (pts /)
(command "._pline") (foreach pt pts (command pt)) (command)
)
(if (setq pts '((0 0)(0 10)(10 10)(10 20)(20 20)(20 30)(30 30)))
(_FOO pts)
)
(princ)
)
例子:
(defun c:pline-example ( / lst )
(setq lst '((0 0) (0 10) (10 10) (10 20) (20 20) (20 30) (30 30)))
(apply 'command (append '("_.pline") lst '("")))
(princ)
) 或
(command "_pline")(mapcar 'command pt)(command "_cl")
为了使其关闭,当然osmode在之前设置为0 BlackBox、Lee Mac和fixo、,
非常感谢你。
我知道我需要再练习1000次才能习惯lisp。
如果你发现我的问题有问题,很抱歉。
当做
Dmitro公司
P、 是否存在将LISP与其他语言进行比较的论坛/线程?
E、 g.“这是C/Pascal/Basic代码——这就是我们在LISP中的实现方式”。 你可能应该在另一个帖子里问这个问题。但请注意,AutoLISP和Visual LISP并不是真正的LISP,而是专门用于AutoCAD的语言。此外,LISP不是同一种语言,因此如果你想“正确”地使用它,最好不要对这类语言考虑太多。顺便说一句,有趣的是,没有人提到while将是重复的替代循环函数,当单步通过可变数量的项目时,或当数量不重要时。这可能是因为AutoLISP与您提到的其他语言的工作方式不同吗? 关于OSMODE的观点很好!为什么不直接应用而不是mapcar?
或者你刚刚展示了还有另一个功能选项?
这种比较没有具体的地方,但想了解如何用不同的语言完成类似的任务是合乎逻辑的。。。在AutoCAD方面,我认为最常见的是Visual LISP与。NET(据我所见,主要是C语言,但也有一些VB.NET和F语言)。。。我猜想,既然VBA 7.1得到了支持,您可能会看到更多的VBA。
顺便说一句,只有当我擅长编写LISP时,我才跃入了语言的最深处。NET API,自学C#&VB。。。就在那时,我真正意识到LISP代码是多么优雅,尽管它的性能受到了影响,它完全没有事务、文档锁、静态字段、权限等等。。。。这让我比想象中更欣赏LISP。
如果你真的有这样的想法,“我在LISP中是这样做的,我怎么能在中做同样的事情呢。净?”等等,在中发布一个线程。NET论坛,包括你的LISP代码,我们会帮助你。
干杯 不可更改,
你说得对,这当然不可能;涉及6号岗位
我的问题是,实际上我不知道如何将循环“螺旋”到“pline”命令。这是因为你过去用一些语言编写了很多代码,你已经采用了一些特定的技巧。在本例中,我总结了列表函数规则(当我提出这个线程时,这对我来说并不明显)。
当做
Dmitro公司 事实上,直到我看到有人这么做,我才明白,可以将一个命令分解为多个对命令的调用。这对我来说是一个很大的启示。FWIW,下面是一个如何使用while的简单示例:
(defun C:Q (/ P)
(command "_.PLINE")
(while
(setq P (getpoint))
(command P)
)
(command "")
)
页:
[1]
2