怎样将函数作为参数
本帖最后由 lostbalance 于 2015-5-8 21:19 编辑att,大致想实现将 fun 作为 fun1 的一个参数,但 fun 本身又带了参数 a。
(defun fun ( a ) ( 1+a) )
(defun fun1 ( fun ) ( 1+ ( fun ) ))
求教,需要怎么修改才能实现?
===============================================
发现用了VL-CATCH-ALL-APPLY好像就可以解决上述问题了?不知道有没有其他的思路,另外,用下面这条代码
(defun fun2 (fun lst )(VL-CATCH-ALL-APPLY fun lst))
然后(fun2 'fun '(1))
会返回,提示错误fun,但把该条代码中的参数fun改成其他的名字就正常了,这边参数名与函数名不能相同吗?
我编程序的时候,习惯参数名和上级函数的变量名字取一样,这样会有什么影响吗?
===============================================
可能我没表达清楚,上面的几个函数只是举例,fun的参数数量不一定,也不一定要实现1+的功能,主要是想写一个通用函数,它能选择调用一个带参数的函数。
(
(setq blk-scl-fun
(lambda ( value )
(if (= "1" value)
(progn
(mode_tile"blk-scl" 1)
(mode_tile"scl-pop" 0)
(mode_image "scl-pik" 1)
(set_tile "blk-scl" (setq blk-scl (cdr (assoc scl-pop ScaleVars))))
)
(progn
(mode_tile"blk-scl" 0)
(mode_tile"scl-pop" 1)
(mode_image "scl-pik" 0)
)
)
)
)
scl-var
)
(action_tile "scl-var" "(blk-scl-fun (setq scl-var $value))")
不知道有没有帮助。摘自LEE MAC的NUMINC.LSP (setq fun (lambda (a) (1+ a)))
(defun fun1 (var) (1+ (fun var))
不知道行不行,可以试试。我也就这水平了。 (defun fun ( a )( 1+a) )
(defun fun1 (lst)( 1+(eval lst)))
;调用(fun1 (list fun a)) (defun fun (a) (1+a) )
(defun fun1 (a b ) (+ b (* 2 a)) )
(setq a(fun1 (fun 2) 3))
命令: (setq a(fun1 (fun 2) 3))
9
子函数返回值。
要么就是把所以子函数重新编写进主函数中。 本帖最后由 wzg356 于 2015-5-8 11:54 编辑
;+1 再+1
(defun fun ( a ) ( 1+a) )
(defun fun1 ( fun ) ( 1+ (eval fun ) ))
;;;(fun1 (list fun 2))====4
;;平方+5
(defun xx (a) (* a a))
(defun xx+5 (func)
(+ 5 (eval func))
)
(xx+5 '(xx 3));;;(xx+5 (list xx 3))=====14 dbqtju 发表于 2015-5-8 07:16 static/image/common/back.gif
(setq fun (lambda (a) (1+ a)))
(defun fun1 (var) (1+ (fun var))
不知道行不行,可以试试。我也就这水 ...
这个只能实现var的控制,不能将fun作为fun1的一个参数 ZZXXQQ 发表于 2015-5-8 08:26 static/image/common/back.gif
(defun fun ( a )( 1+a) )
(defun fun1 (lst)( 1+(eval lst)))
;调用(fun1 (list fun a))
我打算做一个通用的函数,所以fun1引用的fun函数,参数可能有多个,按上面这个调用可能就实现不了了。
VL-CATCH-ALL-APPLY倒是可以解决这个问题,但不知道为啥,参数名和调用函数名相同时,就会报错。 lostbalance 发表于 2015-5-8 21:12 static/image/common/back.gif
我打算做一个通用的函数,所以fun1引用的fun函数,参数可能有多个,按上面这个调用可能就实现不了了。
V ...
函数名也作为变量名保存,同名了就识别不了 lostbalance 发表于 2015-5-8 21:07 static/image/common/back.gif
这个只能实现var的控制,不能将fun作为fun1的一个参数
http://www.lee-mac.com/lisp/html/AddObjectsToBlockV1-1.html
可以看看其中的SELECTIF函数,其内有一个参数就是函数。
不知是否是你需要的
页:
[1]
2