明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 754|回复: 5

[提问] 能否得到像系统自带的*或/或or之类的函数形式

[复制链接]
发表于 2014-9-26 12:01 | 显示全部楼层 |阅读模式
玩了这一段时间了
发现有的系统函数可以选择输入变量或不输入或多输入
例如(inters p1 p2 p3 p4 mode) 最后一个mode可以输入也可以省略。
或例如 (* i1 i2 i3 ....in) 可输入一个到多个不受限制。
我们用lisp编写的函数就没法做到这样,还是其实可以?
有没有同志有思路,或否定掉这个思路,或已经可以做到了。

发表于 2014-9-26 12:21 | 显示全部楼层
直接做不行,可以变通,就是后面参数用表,由表来变长。
建议看看我的“认识自定义函数”,或许能有帮助。
发表于 2014-9-26 12:44 | 显示全部楼层
最近想到一个办法,是不是可以通过判断参数来重新定义函数实现,比如:
(defun LM:acdoc nil
    (eval (list 'defun 'LM:acdoc 'nil (vla-get-activedocument (vlax-get-acad-object))))
    (LM:acdoc)
)
 楼主| 发表于 2014-9-26 13:34 | 显示全部楼层
本帖最后由 我的我啊 于 2014-9-26 13:44 编辑
自贡黄明儒 发表于 2014-9-26 12:44
最近想到一个办法,是不是可以通过判断参数来重新定义函数实现,比如:
(defun LM:acdoc nil
    (eval (l ...


这个方法我也用过,但是还是做不到多个参数的生成
e.g.
  1. (defun Constant (/ lst)
  2. (setq lst '(2 3 4 5 6))
  3. (mapcar '(lambda (x y)
  4.     (eval (list 'defun x (list '/) (list '/ 'pi y)))
  5.    )
  6.   (mapcar 'read
  7.    (mapcar '(lambda (x)
  8.       (strcat "pi/"
  9.        (rtos
  10.         x
  11.        )
  12.       )
  13.      )
  14.     lst
  15.    )
  16.   )
  17.   lst
  18. )
  19. (mapcar '(lambda (x y)
  20.     (eval (list 'defun x (list 'a) (list '/ 'a (list '* '1.0 y))))
  21.    )
  22.   (mapcar 'read
  23.    (mapcar '(lambda (x) (strcat "/" (rtos x)))
  24.     lst
  25.    )
  26.   )
  27.   lst
  28. )
  29. )

 楼主| 发表于 2014-9-26 17:15 | 显示全部楼层
ll_j 发表于 2014-9-26 12:21
直接做不行,可以变通,就是后面参数用表,由表来变长。
建议看看我的“认识自定义函数”,或许能有帮助。

这个方法稍微和我说的有所出入,这个始终也就一个变量
发表于 2014-9-26 22:14 | 显示全部楼层
不可以,Lisp 从出生就不可以
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-14 22:04 , Processed in 0.190305 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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