(car '(+ 1 2)) => '+ not +
+ - это процедура, но '+ - это просто символ!
вы должны проверить переменную без кавычек:
(procedure? (car (list + 1 2))); => #t
;or
(procedure? (car `(,+ 1 2))); =>#t
если список имеет форму '(a b c d), вы можете проверить это следующим образом:
(procedure? (eval (car '(+ 1 2)) (interaction-environment)));=>#t
, потому что:
(eval (car '(+ 1 2)) (interaction-environment))
;=>(eval '+ (interaction-environment))
;=>+
Я не думаю, что здесь нужен макрос, достаточно функции.
абстрагируйте эту функцию:
(define (application-form? lst)
(procedure? (eval (car lst) (interaction-environment))))