lanjqka 发表于 2013-12-28 15:51:12

函数名 SUBR 转 SYM

(defun mymul (a b) (* a b))
;;函数j1
(defun j1 (funname arglist)
(if (or (= (type funname) 'SUBR) (= (type funname) 'USUBR))
    (setq funname 'funname)
)
(apply funname arglist)
)
;;函数j2
(defun j2 (funname arglist / temp)
(if (or (= (type funname) 'SUBR) (= (type funname) 'USUBR))
    (progn (setq temp funname) ;
         (setq funname 'temp)
         ;;(setq funname (function temp))
    )
)
(apply funname arglist)
)运行结果如下:
$ (mymul 2 3)
6
_$ (j1 'mymul '(2 3))
6
_$ (j1 mymul '(2 3))
; 错误: 函数错误: FUNNAME

_$ (j2 mymul '(2 3))
6

函数名数据类型 SUBR 一般用quote或function可以转成SYM
但是调用函数过程中需要变量才能达到目的

自贡黄明儒 发表于 2013-12-28 16:01:02

这样写呢?
(defun j1 (funname arglist)
(and (or (= (type funname) 'SUBR) (= (type funname) 'USUBR))
       (apply funname arglist)
)
)

lanjqka 发表于 2013-12-28 16:18:08

自贡黄明儒 发表于 2013-12-28 16:01 static/image/common/back.gif
这样写呢?

; 错误: 函数错误: #<USUBR @09c5fc80 MYMUL>
页: [1]
查看完整版本: 函数名 SUBR 转 SYM