明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2556|回复: 9

请教个Defun的偏门问题

[复制链接]
发表于 2009-5-26 12:15:00 | 显示全部楼层 |阅读模式

请教个Defun的偏门问题,一般情况下DEFUN的写法是(defun sym ([arguments] [/ variables...]) expr...) ,如:

(defun c:abc ()

  (princ "hello!") 

)

定义了abc这个命令。

请问,这个sym函数名如果是个变量,比如是$com1之类的,有办法执行吗?怎么写?

也就是上例中abc这个命令,或者说是c:abc,是由程序中的一个变量$com1而来的

(setq $com1 "c:abc")    ????这地方怎么写

(defun  $com1 ()  ??????这地方怎么写

  (princ "hello!") 

)

能实现吗?谢谢

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2009-5-26 12:32:00 | 显示全部楼层

楼主先学习以下几个函数:

set

eval

read

就可以轻松实现

 楼主| 发表于 2009-5-26 15:08:00 | 显示全部楼层

谢谢高手

水平菜,试了一下,还是没能试出来

发表于 2009-5-26 17:00:00 | 显示全部楼层

函数无非就是表

特定的格式表可以认为是函数

参考 defun-q 函数

在用上面提到的函数就可以实现

 楼主| 发表于 2009-5-26 19:11:00 | 显示全部楼层

解决了

感谢大师

发表于 2012-2-25 22:38:30 | 显示全部楼层
还望大师们明示。
发表于 2012-2-27 16:39:44 | 显示全部楼层
本帖最后由 snddd2000 于 2012-2-27 16:45 编辑

  1. (setq colorlist        (list '(1 "红色")
  2.                       '(2 "黄色")
  3.                       '(3 "绿色")
  4.                       '(4 "青色")
  5.                       '(5 "蓝色")
  6.                       '(6
  7.                         "洋红色"
  8.                        )
  9.                       '(7 "白色")
  10.                 )
  11. )
  12. (foreach color colorlist
  13.   (setq        colornum  (car color)
  14.         colorname (cadr color)
  15.   )
  16.   (set 'defunname (read (strcat "C:" (itoa colornum))))
  17.   (eval
  18.     (cons 'defun
  19.           (list        defunname
  20.                 ()
  21.                 (alert (itoa colornum))
  22.                 (alert colorname)
  23.           )
  24.     )
  25.   )
  26. )

请问上边的代码只有在加载的时候执行一遍,当命令里输入数字时,没有运行,
如果将两个alert改成princ,则只出现后一个princ的内容。好像只返回最后一句代码的返回值。

望各位指教,如何完整执行代码。
发表于 2012-3-8 07:13:45 | 显示全部楼层
本帖最后由 snddd2000 于 2012-3-8 07:14 编辑

清晨灵感乍现,想到怎么解决,立刻起床。
  1. (setq colorlist        (list '(1 "红色")
  2.                       '(2 "黄色")
  3.                       '(3 "绿色")
  4.                       '(4 "青色")
  5.                       '(5 "蓝色")
  6.                       '(6
  7.                         "洋红色"
  8.                        )
  9.                       '(7 "白色")
  10.                 )
  11. )
  12. (foreach color colorlist
  13.   (setq        colornum  (car color)
  14.         colorname (cadr color)
  15.   )
  16.   (set 'defunname (read (strcat "C:" (itoa colornum))))
  17.   (eval
  18.     (cons 'defun
  19.           (list        defunname
  20.                 ()
  21.                 (read (strcat "(alert \"" (itoa colornum) "\")"))
  22.                 (read (strcat "(alert \"" colorname "\")"))
  23.           )
  24.     )
  25.   )
  26. )
发表于 2012-3-8 07:25:23 | 显示全部楼层
干什么用的?请指教

点评

对有规律的一组自定义命令进行批量定义。  发表于 2012-3-8 08:48
发表于 2012-3-8 09:59:56 | 显示全部楼层
谢谢楼主分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-9-25 02:46 , Processed in 0.312904 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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