Ошибка в коде Lisp

При запуске выявляется ошибка: *** - FUNCALL: аргумент (LAMBDA (X) (< X 0)) - не функция. Как это можно исправить?

 `(DEFUN CHANGE (FN L)
  (COND 
    ((NULL L) NIL)
    ((NOT (FUNCALL FN (CAR L)))
      (CONS '* (CHANGE FN (CDR L))))
    (T (CONS (CAR L) (CHANGE FN (CDR L))))
  )
)

(PRINT '_);
(SETQ L1 '(3 4 G 6 E 4 R))
(PRINT (CHANGE 'NUMBERP L1))
(SETQ L2 '(0 4 7 -6 6 -9 10))
(PRINT (CHANGE '(LAMBDA (X) (< X 0)) L2))`

Ответы (1 шт):

Автор решения: AlexGlebe

Список после квоты '(lambda.. не вопринимается как лямбда функция. Только как список.

Есть три варианта, как правильно записать :

(PRINT (CHANGE (lambda (X) (< X 0)) L2))
(PRINT (CHANGE #'(lambda (X) (< X 0)) L2))
(PRINT (CHANGE (function (lambda (X) (< X 0))) L2))
→ Ссылка