Lisp, инструкции не работают в defun [дубликаты]

На этот вопрос уже есть ответ:

Общепринятая ошибка: «должно быть лямбда-выражением» 4 ответа

Я пытаюсь создать функцию, которая меняет инфиксный ввод на префикс, например:(x + 1) в качестве ввода выводится как(+ x 1).

Так вот мой код на данный момент:

(setq x '(Y + 1))
(if (listp x ) (list (second x) (first x) (first (last x))) x)

так что возвращается(+ Y 1) если я введу список и пользовательский ввод, если это не список.

Однако проблема в том, что я не могу заставить этот код работать в функции:

(defun prefixToInfix (x)(
   (if (listp x ) (list (second x) (first x) (first (last x))) x)
   )
 )

функция действительно создана, но когда я ее называю

(prefixtoinfix '(Y + 1))

Я получаю ошибку

Error: Illegal function object: (IF (LISTP X) (LIST # # #) X).
[condition type: TYPE-ERROR]

Я не знаю, почему мой оператор if работает в основной программе, но не работает, когда я запускаю его из своей функции.

Ответы на вопрос(1)

Ваш ответ на вопрос