gS7 发表于 2022-7-5 16:41:23

与lambda函数混淆

嗨,伙计们
 
如何使用lambda函数从列表中创建坐标线
请需要帮助解决此问题
 
(defun c:test(/ lst )
   (setq lst '((1515.32 999.613 0.0) (2314.23 1081.97 0.0) (1690.57 752.536 0.0)
          (2458.55 829.747 0.0) (1685.41 474.574 0.0) (2716.26 443.689 0.0))
   )
   (mapcar (function (lambda (x y)
                      (command "line" x y "") ????
                ))
      lst
   )
)

Grrr 发表于 2022-7-5 17:08:19


(mapcar
'(lambda (x y) (entmakex (list (cons 0 "LINE") (cons 10 x) (cons 11 y))))
lst
(append (cdr lst) (list (last lst)))
)
或:

(mapcar
'(lambda (x) (entmakex (list (cons 0 "LINE") (cons 10 (car x)) (cons 11 (cadr x)))))
(mapcar 'list lst (append (cdr lst) (list (last lst))))
)
 
 
编辑:或者如果您使用LM的entmake函数,那么您可以

(defun LWPoly (lst cls) ; LM
(entmakex
   (append
   (list
       (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity")
       (cons 100 "AcDbPolyline") (cons 90 (length lst)) (cons 70 cls)
   )
   (mapcar (function (lambda (p) (cons 10 p))) lst)
   )
)
)
执行以下操作:
(LWPoly lst 0)

gS7 发表于 2022-7-5 17:23:32

吼叫声
 
这太棒了,我不想只创建3行实体,例如'(1 1)'(2 2)'(3 3),请等待您的回复
 

Grrr 发表于 2022-7-5 17:36:42

 
如果要从点列表中创建线,必须将项目分组,使每个项目由2个点组成(一条线由2个点定义):
而不是这样的列表
'(1 1) '(2 2) '(3 3)
您必须使用:

(list
'((1 1) (2 2)) ; line #1
'((2 2) (3 3)) ; line #2
'((3 3) (1 1)) ; line #3 (if you want to close the shape)
)

gS7 发表于 2022-7-5 17:54:45

 
 
谢谢,这对我帮助很大
页: [1]
查看完整版本: 与lambda函数混淆