1cookie76 发表于 2009-1-11 19:55:00

好的

hbllw 发表于 2009-3-18 14:08:00

<p>嗯 ,学习了</p>

bridgewind 发表于 2009-4-7 23:24:00

<p>非常好,学习了,感谢。</p>

xjf 发表于 2009-4-19 11:07:00

好东东,算上精通lisp了

rzg0972 发表于 2009-4-19 14:27:00

路过帮顶

66668 发表于 2009-4-24 08:14:00

无痕 发表于 2009-8-23 21:36:00

本帖最后由 作者 于 2009-8-24 0:59:13 编辑

nonsmall发表于2008-11-26 15:03:00static/image/common/back.gif学习VB时看到function函数可以定义可选参数的函数LISP为什么不能呢(defun go (a b c) (if a (print (list \"a=\" a))) (if b (print (list \"b=\" b))) (if c (print (list \"c


可以这样精简一下代码 ;| xxcall=LISP任意参数调用函数---修改by lxx.2009.8.23
格式: (xxcall (list 函数名 参数1 参数2 ...))
参考: nonsmall 的Call_func函数,http://bbs.mjtd.com/forum.php?mod=viewthread&tid=72144&replyID=&skin=1 修改内容:1.精简程序2.修正返回值.3支持c:xx 定义的命令.
(defun c:tt ()(print "test"))
(defun tt (a b c)(mapcar 'princ (list a b c)))
(xxCall '(c:tt))
(xxCall '(tt 1 2))
(xxCall (list 'tt 1 (+ 2 2)))
(xxCall '(tt 1 2 3 4))
(xxCall '(tt 1 2 3))
|:
(defun xxCall (funclst / funs args i ret)
(setq funs (car funclst)
i 0)
(while (vl-catch-all-error-p
    (setq ret (vl-catch-all-apply funs args)))
    (setq args (reverse(cons (nth (setq i (1+ i)) funclst) (reverse args))))
)
ret
)

不过同时发现这个创意也是有风险的:对func函数中如有'+,或read等支持不确定参数或接受nil参数的函数,会造成死循环.
如:
(defun tt (a b c)(apply '+ (list a b c))) ;; 函数缺陷.
(defun tt2(a b c)(mapcar 'read (list a b c))) ;; 函数缺陷.
(call_func '(tt 1 2)) ;; 死循环
(call_func '(tt2 1 2)) ;; 死循环
我修改的函数也一样,还没时间写规避代码。
看来这个函数要强壮起来还是有工作要做的


ghost435 发表于 2009-11-12 17:06:00

<p>很想学习一下</p><p></p>

ghost435 发表于 2009-11-12 17:29:00

功底太浅,光给出核心代码 还是不会用:( 哪位高手能解释一下,或是给段例程!

ghgh0130 发表于 2009-11-25 21:08:00

<p>高难度动作 看不懂</p>
页: 1 2 3 [4] 5 6 7 8 9
查看完整版本: [原创]LISP定义可选参数函数的调用