2012-05-25 37 views
2

可能重複:
How to pass a lambda expression in Elisp如何調用拉姆達在LISP傳遞參數

我有以下代碼:

(defun my-map (p l) 
    (mapcar (lambda (el) (p el)) l)) 

(defun test() 
    (my-map (lambda (x) (+ x 1)) (list 1 2 3))) 

(它的例子 - 不是實際的代碼我試圖寫)。它抱怨找不到函數p:

Debugger entered--Lisp error: (void-function p) 
    (p el) 
    (lambda (el) (p el))(1) 
    mapcar((lambda (el) (p el)) (1 2 3)) 
    my-map((lambda (x) (x + 1)) (1 2 3)) 
    test() 
    eval((test) nil) 
    eval-expression((test) nil) 
    call-interactively(eval-expression nil nil) 
    recursive-edit() 
    debug(error (void-variable test)) 
    eval(test nil) 
    eval-expression(test nil) 
    call-interactively(eval-expression nil nil 

我想,它把一個p的符號,而不是變量在外部範圍的限制。如何使它工作?

+0

可能重複[如何在Elisp中傳遞lambda表達式](http://stackoverflow.com/questions/5357656/how-to-pass-a-lambda-expression-in-elisp)和[How我是否將函數作爲參數傳遞給elisp?](http://stackoverflow.com/questions/213267/how-do-i-pass-a-function-as-a-parameter-to-in-elisp) – phils

+0

@wvxvw:我的意思是(+ x 1)'。 –

+0

@phils:你是對的(我投票結束 - 奇怪的是我認爲作者可以將它自己的問題作爲重複關閉)。 –

回答

7

您想使用funcall

funcall是「C源代碼」中的一個內置函數。

(funcall FUNCTION &其餘ARGUMENTS)

呼叫第一個參數爲函數,傳遞其餘的參數到它。 返回函數返回的值。因此,(funcall'cons'x'y) 返回(x。y)。