找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2469|回复: 27

[求助] 俩个函数合在一起,求帮助

[复制链接]

已领礼包: 218个

财富等级: 日进斗金

发表于 2013-5-20 11:51:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
(setq la '("CENTER" "DIM" "COOL" "CORE")选取图层表内的线
      ss (ssget (list '(0 . "LINE") (cons 8 (apply 'strcat (mapcar '(lambda (x) (strcat x ",")) la)))))   
)
这个统计长度
defun c:cLen (/)
  (vl-load-com)
  (vl-catch-all-apply
    (function
      (lambda (/ e el lay ss ssl i len)
(while
   (and
     (progn
       (princ
  "\n点选特征曲线[回车退出] ...."
       )
       T
     )
     (setq e (ssget ":S" '((0 . "*LINE,ARC,CIRCLE,ELLIPSE"))))
   )
    (setq el  (entget (ssname e 0))
   lay (assoc 8 el)
    )
    (princ "\n统计范围.....")
    (if (setq
   ss (ssget (list lay '(0 . "*LINE,ARC,CIRCLE,ELLIPSE")))
        )
      (progn
        (setq ssl (sslength ss)
       i  -1
       len 0.
        )
        (repeat ssl
   (setq e   (ssname ss (setq i (1+ i)))
         len (+ len
         (vlax-curve-getdistatparam
    e
    (vlax-curve-getendparam e)
         )
      )
   )
        )
        (princ (strcat "Totle Length = " (vl-princ-to-string len))
        )
      )
    )
)
      )
    )
  )
  (princ)
)
请问如何降俩个合并在一起,求帮助谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2013-5-20 11:57:33 | 显示全部楼层

  1. (defun c:cLen (/)
  2.   (vl-load-com)
  3.   (vl-catch-all-apply
  4.     (function
  5.       (lambda (/ ss ssl i len)
  6. (princ "\n统计范围.....")
  7. (while
  8.    (setq
  9.      ss (ssget '((0 . "line") '(8 . "CENTER,DIM,COOL,CORE")))
  10.    )
  11.     (setq ssl (sslength ss)
  12.    i   -1
  13.    len 0.
  14.     )
  15.     (repeat ssl
  16.       (setq e   (ssname ss (setq i (1+ i)))
  17.      len (+ len
  18.      (vlax-curve-getdistatparam
  19.        e
  20.        (vlax-curve-getendparam e)
  21.      )
  22.          )
  23.       )
  24.     )
  25.     (princ (strcat "Totle Length = " (vl-princ-to-string len)))
  26. )
  27.       )
  28.     )
  29.   )
  30.   (princ)
  31. )

点评

有个疑问~请教~如果我要把图层1 2 3的长度分别统计如何处理  详情 回复 发表于 2013-6-1 22:57
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 218个

财富等级: 日进斗金

 楼主| 发表于 2013-5-20 12:03:18 | 显示全部楼层

非常感谢 有一个函数不明白请帮忙解释下(cons 8 (apply 'strcat (mapcar '(lambda (x) (strcat x ","))
然后我感觉是否可以这样写 (cons 8 (apply 'strcat (mapcar '(lambda (x) (strcat x ",")) = (cons 8    “,")
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-5-20 12:05:02 来自手机 | 显示全部楼层
这样用多此一举来自: Android客户端
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 218个

财富等级: 日进斗金

 楼主| 发表于 2013-5-20 12:07:54 | 显示全部楼层

什么意思没有明白?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-5-20 12:18:50 | 显示全部楼层
fkyourmather 发表于 2013-5-20 12:03
非常感谢 有一个函数不明白请帮忙解释下(cons 8 (apply 'strcat (mapcar '(lambda (x) (strcat x ","))
...

你得弄明白 apply 和 mapcar 的含义,再决定怎么做

1、apply 是把一个函数 添加到一个数据表的头,然后对这个表求值

因为LISP规定表的第一个元素是函数, CDR 是函数的参数,当你的参数数据可能要通过一系列操作才得到后,就是你先计算参数是什么,然后去给一个函数去求值。

比如参数是  '(3 4 5 6 "abc")

那么 (apply 'func '(3 4 5 6 "abc")) 就相当于 (func 3 4 5 6 "abc")

2、mapcar 是提取参数表中的每一个元素做参数,传递给处理的函数,其实是个循环结构,可以用循环结构改写。

比如:def='((1 2)(3 4))
           (mapcar '(lambda(x)(append (cons 1 x) def)) abc)
相当于:
          (setq i 0)
           (repeat (length abc)
                (setq a (nth i abc))
                (setq def (append (cons 1 a) def))
                (setq i (1+ i))
           )
所以,你看看你的问题是否需要那样改写。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 218个

财富等级: 日进斗金

 楼主| 发表于 2013-5-20 12:33:58 | 显示全部楼层

TEST 出现点问题了

命令:  CLEN
统计范围.....
没有反映
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-5-20 12:54:04 来自手机 | 显示全部楼层
8 前面多了 '来自: Android客户端
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 218个

财富等级: 日进斗金

 楼主| 发表于 2013-5-20 12:55:13 | 显示全部楼层
Lispboy 发表于 2013-5-20 12:18
你得弄明白 apply 和 mapcar 的含义,再决定怎么做

1、apply 是把一个函数 添加到一个数据表的头,然 ...

(mapcar '(lambda(x)(append (cons 1 x) def)) abc)
这句话等于什么 我明白mapcar的意思但是整体的就不明白了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-5-20 13:00:52 | 显示全部楼层
fkyourmather 发表于 2013-5-20 12:55
(mapcar '(lambda(x)(append (cons 1 x) def)) abc)
这句话等于什么 我明白mapcar的意思但是整体的就不 ...

整体等于什么不在下面用 REPEAT循环给你写了嘛,就等于那个REPEAT过程。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-5-20 13:01:56 来自手机 | 显示全部楼层
通俗讲 对abc内每个元素用 lambda 内语句进行一系列处理后,用返回值替换原值来自: Android客户端
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 218个

财富等级: 日进斗金

 楼主| 发表于 2013-5-20 13:31:17 | 显示全部楼层
Lispboy 发表于 2013-5-20 12:18
你得弄明白 apply 和 mapcar 的含义,再决定怎么做

1、apply 是把一个函数 添加到一个数据表的头,然 ...

当i=0的时候 def= (?)这样我就明白了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 218个

财富等级: 日进斗金

 楼主| 发表于 2013-5-20 13:40:48 | 显示全部楼层
Free-Lancer 发表于 2013-5-20 13:01
通俗讲 对abc内每个元素用 lambda 内语句进行一系列处理后,用返回值替换原值

当i=0的时候 def= (?)这样我就明白了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-5-20 14:27:45 | 显示全部楼层
vl-catch-all-apply function lambda等对新手很难看的懂
我来个比较好看懂得{:soso_e113:}
  1. (defun c:tt (/ curve tlen ss n i)
  2.   (vl-load-com)
  3.   (setq i 0)
  4.   (princ (strcat "\n请选择线"))
  5.   (if (setq ss (ssget (list '(-4 . "<OR") '(8 . "DIM,CORE,COOL,CENTER") '(-4 . "OR>") '(-4 . "<OR") '(0 . "LINE") '(-4 . "OR>"))))
  6.     (progn
  7.       (setq n 0)
  8.       (repeat (sslength ss)
  9.         (setq curve (vlax-ename->vla-object (ssname ss n)))
  10.         (setq tlen (vlax-curve-getDistAtParam curve (vlax-curve-getEndParam curve)))
  11.         (setq i (+ i tlen))
  12.         (setq n (1+ n))
  13.       )
  14.       (print (strcat "总长度: " (rtos i 2 4)))
  15.     )
  16.   )
  17.   (princ)
  18. )

评分

参与人数 1D豆 +6 收起 理由
XDSoft + 6 热心帮忙奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-5-20 15:22:49 | 显示全部楼层
QiaoCheng 发表于 2013-5-20 14:27
vl-catch-all-apply function lambda等对新手很难看的懂
我来个比较好看懂得

过滤表中去掉 -4 部分
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-25 10:35 , Processed in 0.396343 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表