明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 926|回复: 14

[提问] 求批量定义函数?

[复制链接]
发表于 2023-3-15 07:42 | 显示全部楼层 |阅读模式
本帖最后由 cchessbd 于 2024-3-31 21:44 编辑

求各位高手帮我精简以下函数,尽量精简些来批量定义。因为我还想加一些、、、
但是论坛的帖子的代码,我看不懂。怎么修改那个帖子的代码,都达不到我以下代码的效果。

(defun C:+A () (TQHZ "K*+*" "A" "Q") )
(defun C:+B () (TQHZ "K*+*" "B" "Q") )
(defun C:+C () (TQHZ "K*+*" "C" "Q") )
(defun C:+D () (TQHZ "K*+*" "D" "Q") )
(defun C:+E () (TQHZ "K*+*" "E" "Q") )
(defun C:+F () (TQHZ "K*+*" "F" "Q") )
(defun C:+G () (TQHZ "K*+*" "G" "Q") )
(defun C:+H () (TQHZ "K*+*" "H" "Q") )
(defun C:+I () (TQHZ "K*+*" "I" "Q") )
(defun C:+J () (TQHZ "K*+*" "J" "Q") )
(defun C:+L () (TQHZ "K*+*" "L" "Q") )
(defun C:+M () (TQHZ "K*+*" "M" "Q") )
(defun C:+N () (TQHZ "K*+*" "N" "Q") )

以下为答案1:
(foreach n '(1 2 3 4 5 6)
        (eval (list 'defun (read(strcat"L"(itoa n))) nil (list 'setq 'key n)'(princ key) ))
)

以下为答案2:

  • (setq lChars '("E" "F" "G" "H" "I" "J" "L" "M" "N"))
  • (defun funcs_defun (lChars / sChar)
  •   (foreach sChar lChars
  •     (eval (list 'defun (read  (strcat "C:+" sChar)) nil (list 'TQHZ "K*+*" sChar "Q")))
  •   );_for
  • );_defun



以下为答案3:
  • (defun c:tt()
  •   (defun abc(tx)(eval(read(strcat"(defun C:+"tx"(/)(TQHZ\"K*+*\"\""tx"\"\"Q\"))"))))
  •   (mapcar 'abc '("A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "L" "M" "N"))
  •   (princ)
  • )



发表于 2023-3-15 09:01 | 显示全部楼层
本帖最后由 liuhe 于 2023-3-15 09:04 编辑


(setq num 65 i 23)
(repeat        i
  (eval        (read (strcat "(defun-q""\tc:+"(chr NUM)"(/) (TQHZ"
                       "\"K*+*\""
                      (vl-prin1-to-string(chr NUM))
                      "\"Q\""
                      "))"
              )
        )
  )
  (SETQ I (1+ I))
)
(defun-q-list-ref 'C:+A )
defun-q  是用来测试查看函数定义的,测试完成成后,改成defun  别人就看不到定义了。

求助,如何批量定义函数 - AutoLISP/Visual LISP 编程技术 - AutoCAD论坛 - 明经CAD社区 - Powered by Discuz! (mjtd.com)
 楼主| 发表于 2023-3-15 09:20 | 显示全部楼层
liuhe 发表于 2023-3-15 09:01
(setq num 65 i 23)
(repeat        i
  (eval        (read (strcat "(defun-q""\tc:+"(chr NUM)"(/) (TQHZ"

谢谢您!但是您可能没注意,+K是没有定义的。

我想要的是这样的
(foreach n '(1 2 3 4 5 6)
        (eval (list 'defun (read(strcat"L"(itoa n))) nil (list 'setq 'key n)'(princ key) ))
)

就是我把 表里面替换成 "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "L" "M" "N" ,没有“K"
发表于 2023-3-15 09:39 | 显示全部楼层
(setq lst '("A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "L" "M" "N"))
(foreach item lst
  (eval
    (list 'defun-q
          (read (strcat "c:+" item))
          nil
          (list 'TQHZ "K*+*" item "Q")
    )
  )
)
;抄了前面的:菜卷鱼
发表于 2023-3-15 09:07 | 显示全部楼层
(defun c:tt (/ s)
  (setq _ascii 65)
  (repeat 13
    (setq s (chr _ascii))
    (eval (list        'defun-q
                (read (strcat "c:+" s))
                nil
                (list 'TQHZ "K*+*" s "Q")
          )
    )
    (setq _ascii (1+ _ascii))
  )
)
发表于 2023-3-15 09:09 | 显示全部楼层
菜卷鱼 发表于 2023-3-15 09:07
(defun c:tt (/ s)
  (setq _ascii 65)
  (repeat 13

表还可以这样用 想学习了。我以前只是玩字符串
发表于 2023-3-15 09:58 | 显示全部楼层
本帖最后由 e2002 于 2023-3-15 10:00 编辑

  1. (setq lChars '("E" "F" "G" "H" "I" "J" "L" "M" "N"))
  2. (defun funcs_defun (lChars / sChar)
  3.   (foreach sChar lChars
  4.     (eval (list 'defun (read  (strcat "C:+" sChar)) nil (list 'TQHZ "K*+*" sChar "Q")))
  5.   );_for
  6. );_defun



都是一个套路哈...
 楼主| 发表于 2023-3-15 10:15 | 显示全部楼层
谢谢以上各位高手的热心回复。太感谢了!

主要是最近遇到的问题太多了。自己能力又很不够,没法一一解决。
发表于 2023-3-15 10:39 | 显示全部楼层
eval 这一句,如果换成 apply ,该怎么写呢?
 楼主| 发表于 2023-3-15 10:45 | 显示全部楼层
e2002 发表于 2023-3-15 10:39
eval 这一句,如果换成 apply ,该怎么写呢?

我也搞不懂。尤其是mapcar,lamda
再加上混合了defun,list,eval,read的话,把我要绕晕。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 16:54 , Processed in 3.365303 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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