明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1015|回复: 7

[已解答] 急等大神帮忙,困惑了

[复制链接]
发表于 2015-9-3 19:41:37 | 显示全部楼层 |阅读模式
急急如律令,天灵灵,地灵灵,快来大神显神通,求助求助!


  1. ;;假设 lst=(("a" . "11") ("a" . "22") (b" . "11") ("b" . "11") ("c" . "121") ("c" . "22") ("d" . "22") ("d" . "122"))
  2. ;;以下代码目的是:历遍lst 如果有相同的名称(如“a”等)就累加该名称后的数字,最后输出为:a   累加后的和 ; b  累加后
  3. ;的和,以此类推
  4. ;;代码总是错误请大神帮忙修改,错误出在哪里,先谢了!
  5. (while lst
  6.   (setq n 0)
  7.   (foreach i lst(if (= (caar lst) (car i))(setq n (+ n (cdr i)))))

  8.   (setq newlst (append newlst (list (cons (caar lst) n))))
  9.   (setq lst(vl-remove-if '(lambda (x) (= (caar lst) (car x))) lst))
  10. )
  11. (setq newlst (vl-sort newlst (function(lambda (x y) (< (car x) (car y))))))
  12. (setq x2 (getpoint "\n起始位置:"))
  13. (setq x3 (polar x2 0 12))
  14. (command "text" "c" x2 "2" "0" "种类")
  15. (command "text" "c" x3 "2" "0" "数量")
  16. (foreach x newlst
  17.   (setq x2(polar x2 (/ pi -2) 3))
  18.   (setq x3 (polar x2 0 12))
  19.   (command "text" "c" x2 "1.5" "0" (car x))
  20.   (command "text" "c" x3 "1.5" "0" (cdr x))
  21. )

 楼主| 发表于 2015-9-3 19:44:01 | 显示全部楼层
自己占个沙发,代码是从网络搜集,作者不详,特此声明,以示感谢!快来大神,大神,救我!
发表于 2015-9-3 20:10:45 | 显示全部楼层
本帖最后由 q3_2006 于 2015-9-3 20:13 编辑

(setq lst '(("a" . "11") ("a" . "22") ("b" . "11") ("b" . "11") ("c" . "121") ("c" . "22") ("d" . "22") ("d" . "122"))
        lb nil
)
(while lst
  (setq a (caar lst)
          la (vl-remove-if-not '(lambda(x) (= a (car x))) lst)
          lst (vl-remove-if '(lambda ( x ) (member x la)) lst)
          la (cons (caar la) (rtos (apply '+ (mapcar '(lambda(x) (read (cdr x))) la))))
          lb (cons la lb)
  )
)
(reverse lb)
 楼主| 发表于 2015-9-3 20:36:42 | 显示全部楼层
q3_2006 发表于 2015-9-3 20:10
(setq lst '(("a" . "11") ("a" . "22") ("b" . "11") ("b" . "11") ("c" . "121") ("c" . "22") ("d" . "2 ...

很是感谢,回复如此之快,但是我刚测试了下,(print lb)结果重复好多遍,最好结果能输出到图纸,谢谢
 楼主| 发表于 2015-9-3 20:42:50 | 显示全部楼层
q3_2006 发表于 2015-9-3 20:10
(setq lst '(("a" . "11") ("a" . "22") ("b" . "11") ("b" . "11") ("c" . "121") ("c" . "22") ("d" . "2 ...

真是神奇了,setq  还可以这么用,涨姿势。
发表于 2015-9-3 20:59:52 | 显示全部楼层
大漠1262670234 发表于 2015-9-3 20:42
真是神奇了,setq  还可以这么用,涨姿势。

你说的应该是‘这个符号,单引号表示quote函数。不对后面的表达式求值,用处很大。
这个函数因为用得很频繁,所以简写成单引号,你可以在网上、论坛搜索相关资料。
发表于 2015-9-3 21:02:05 | 显示全部楼层
本帖最后由 q3_2006 于 2015-9-3 21:06 编辑
大漠1262670234 发表于 2015-9-3 20:42
真是神奇了,setq  还可以这么用,涨姿势。

(defun c:tt ()
(setq lst '(("a" . "11") ("a" . "22") ("b" . "11") ("b" . "11") ("c" . "121") ("c" . "22") ("d" . "22") ("d" . "122"))
        p (getpoint "\n起始位置:")
        f (command "text" "c" p "2" "0" "种类")
        f (command "text" "c" (polar p 0 12) "2" "0" "数量")
        p1 p
)
(while lst
  (setq a (caar lst)
       la (vl-remove-if-not '(lambda(x) (= a (car x))) lst)
       lst (vl-remove-if '(lambda ( x ) (member x la)) lst)
       la (cons (caar la) (rtos (apply '+ (mapcar '(lambda(x) (read (cdr x))) la))))
       p1 (polar p1 (/ pi -2) 3)
       f (command "text" "c" p1 "1.5" "0" (car la))
       f (command "text" "c" (polar p1 0 12) "1.5" "0" (cdr la))
  )
)       
)

点评

谢谢!有空时,我来可以消化下!  发表于 2015-9-7 23:10
 楼主| 发表于 2015-9-6 16:41:01 | 显示全部楼层
q3_2006 发表于 2015-9-3 21:02
(defun c:tt ()
(setq lst '(("a" . "11") ("a" . "22") ("b" . "11") ("b" . "11") ("c" . "121") ("c" ...

我已经搞定了,但还是很感谢!,膜拜高手。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-21 15:36 , Processed in 0.207416 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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