我的我啊 发表于 2014-9-26 12:01:57

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

玩了这一段时间了
发现有的系统函数可以选择输入变量或不输入或多输入
例如(inters p1 p2 p3 p4 mode) 最后一个mode可以输入也可以省略。
或例如 (* i1 i2 i3 ....in) 可输入一个到多个不受限制。
我们用lisp编写的函数就没法做到这样,还是其实可以?
有没有同志有思路,或否定掉这个思路,或已经可以做到了。

ll_j 发表于 2014-9-26 12:21:53

直接做不行,可以变通,就是后面参数用表,由表来变长。
建议看看我的“认识自定义函数”,或许能有帮助。

自贡黄明儒 发表于 2014-9-26 12:44:25

最近想到一个办法,是不是可以通过判断参数来重新定义函数实现,比如:
(defun LM:acdoc nil
    (eval (list 'defun 'LM:acdoc 'nil (vla-get-activedocument (vlax-get-acad-object))))
    (LM:acdoc)
)

我的我啊 发表于 2014-9-26 13:34:04

本帖最后由 我的我啊 于 2014-9-26 13:44 编辑

自贡黄明儒 发表于 2014-9-26 12:44 http://bbs.mjtd.com/static/image/common/back.gif
最近想到一个办法,是不是可以通过判断参数来重新定义函数实现,比如:
(defun LM:acdoc nil
    (eval (l ...

这个方法我也用过,但是还是做不到多个参数的生成
e.g.
(defun Constant (/ lst)
(setq lst '(2 3 4 5 6))
(mapcar '(lambda (x y)
    (eval (list 'defun x (list '/) (list '/ 'pi y)))
   )
(mapcar 'read
   (mapcar '(lambda (x)
      (strcat "pi/"
       (rtos
      x
       )
      )
   )
    lst
   )
)
lst
)
(mapcar '(lambda (x y)
    (eval (list 'defun x (list 'a) (list '/ 'a (list '* '1.0 y))))
   )
(mapcar 'read
   (mapcar '(lambda (x) (strcat "/" (rtos x)))
    lst
   )
)
lst
)
)

我的我啊 发表于 2014-9-26 17:15:28

ll_j 发表于 2014-9-26 12:21 static/image/common/back.gif
直接做不行,可以变通,就是后面参数用表,由表来变长。
建议看看我的“认识自定义函数”,或许能有帮助。

这个方法稍微和我说的有所出入,这个始终也就一个变量

ivde 发表于 2014-9-26 22:14:52

不可以,Lisp 从出生就不可以
页: [1]
查看完整版本: 能否得到像系统自带的*或/或or之类的函数形式