PhantomFox 发表于 2011-12-19 16:50:24

[求助] 能帮忙详细分析下次源程序吗?

本帖最后由 PhantomFox 于 2011-12-19 17:24 编辑

我正在学习lisp语言,有个程序,对里面的几个步骤不是很明白,请高手指点!
能把每行的具体内容和作用写明最好!
;;;重圆消除 (相同圆心、相同半径);;;
========================================
(defun C:TT (/ SS LST I EN ENL PT10 PT11 A N LST_NEW)
(if (setq SS (ssget '((0 . "CIRCLE"))))
    (progn ;;组织成表((enpt10pt11)...)         
    (setq LST '()
   I   0
    )
    (repeat (sslength SS)
      (setq EN (ssname SS I)
   ENL (entget EN)
   PT10 (cdr (assoc 10 ENL))
   r (cdr (assoc 40 ENL))
      )
      (setq LST (cons (list EN PT10 r) LST))
      (setq I (1+ I))
    )
    ;;逐个对比   
    (while LST
      ;;取首个         
      (setq A
         (car LST)
   LST (cdr LST)
      )
      ;;对比         
      (setq LST_NEW '())
      (foreach N LST
      (if
   (and (equal (cadr A) (cadr N) 0.001)
      (equal (caddr A) (caddr N) 0.001)
   )
    (entdel (car N)) ;_删除实体   
    (setq LST_NEW (cons N LST_NEW))
      )
      )
      ;;    (setq LST LST_NEW)   ) ) )
      (princ)
    )
    )
)
)

skynoon 发表于 2011-12-19 20:37:41

建议你找一个《LISP函数参考2008中文版.chm》对照着看一下各个函数,这样才能学的更透彻

dunkel 发表于 2011-12-20 08:51:01

程序设计方面的,最好是到“开发板块”去。另外,有什么疑问,最好能明确些;不明白的,是哪里不明白。

PhantomFox 发表于 2011-12-20 09:55:14

本帖最后由 PhantomFox 于 2011-12-20 09:59 编辑

skynoon 发表于 2011-12-19 20:37 http://bbs.mjtd.com/static/image/common/back.gif
建议你找一个《LISP函数参考2008中文版.chm》对照着看一下各个函数,这样才能学的更透彻

已经对着函数看过了,里面有几个地方不明白。

比如说这几句
            (if (setq SS (ssget '((0 . "CIRCLE"))))   


[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif    (setq LST '()
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif   I   0
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif    )
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif   PT10 (cdr (assoc 10 ENL))
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif   r (cdr (assoc 40 ENL))
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif      )
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif      (setq LST (cons (list EN PT10 r) LST))
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif      (foreach N LST
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif      (if
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif   (and (equal (cadr A) (cadr N) 0.001)
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif      (equal (caddr A) (caddr N) 0.001)
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif   )
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif    (entdel (car N)) ;_删除实体
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif    (setq LST_NEW (cons N LST_NEW))
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif      )
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif      )
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif      ;;    (setq LST LST_NEW)   ) ) )
还不是很明白!!!能讲解下吗?

qq229918602 发表于 2011-12-20 20:17:44

我现在学习也是一条条地查。

skynoon 发表于 2011-12-20 21:36:07

1,建立空表,对I赋值04,ENL的10组码 坐标赋值给PT10(在此是圆心坐标) 5 ENL的40组码,赋值给r(在此是半径)7建立表 8之后 对表的每一个元素 循环

PhantomFox 发表于 2011-12-21 09:37:36

skynoon 发表于 2011-12-20 21:36 static/image/common/back.gif
1,建立空表,对I赋值04,ENL的10组码 坐标赋值给PT10(在此是圆心坐标) 5 ENL的40组码,赋值给r(在此是半 ...

基本清楚了,感谢!

lixuedong 发表于 2011-12-30 13:08:10

你拿到cad里,一条一条的执行,很快就明白了

PhantomFox 发表于 2011-12-30 16:13:54

lixuedong 发表于 2011-12-30 13:08 static/image/common/back.gif
你拿到cad里,一条一条的执行,很快就明白了

谢谢指导!
页: [1]
查看完整版本: [求助] 能帮忙详细分析下次源程序吗?