2016-03-04 52 views
1

想要:如果傳遞函數或閉包,則調用它,否則返回輸入。我試試這個:調用作爲參數傳遞的函數

(defun ifcall (x) (if (typep x 'FUNCTION) (funcall x) (x))) 

並獲得「未定義函數:X」。爲什麼?

回答

5

您的if的其他部分不應包裹在parens中。當你把東西放在parens裏面的時候,它會被視爲一個函數調用。要返回該值,只需執行

(defun ifcall (x) (if (typep x 'FUNCTION) (funcall x) x))