2017-04-26 10 views
1

私は、関数のパラメータとして述語を必要とします。LISP:述語をパラメータとして使用

(DEFUN per (F L) 
    (cond ((F L) 'working) 
      (T  'anything))) 

(per 'numberp 3) 

それがエラーを発生させた結果として:

(defun per (F L) 
    (if (funcall F L) 
     'working 
     'other)) 
(per #'numberp 3) 
==> WORKING 
(per #'numberp "3") 
==> OTHER 

参照:

Undefined operator F in form (F L).

答えて

0

が、ここでは別の例です:

(defun strip-predicate (p list) 
    (cond ((endp list) nil) 
     ((funcall p (first list)) (strip-predicate (rest list))) 
     (T (cons (first list) (strip-Predicate p (rest list)))))) 

これは、このような原子またはNUMBERPなどの述語で使用することができます

(strip-predicate 'numberp '(a 1 b 2 c 3 d)) 

(a b c d)

か:

(strip-predicate 'atom '(a (a b) b c d)) 

((a b))

関連する問題