2016-04-27 2 views
0

я определяю простую функцию для власти в CLISP как:EVAL: не определено функция Common LISP

(defun power(B E) 
    (if (= E 1) 
     B 
     (* B (power (B (- E 1)))))) 

Но когда я пытаюсь вызвать функцию так:

(power 2 6) 

я получаю следующее сообщение об ошибке:

*** - EVAL: undefined function B

Я попытался следующий код на Ideone.com как:

(defun power(B E) 
    (if (= E 1) 
     B 
     (* B (power (B (- E 1)))))) 
(setq base (read)) 
(setq exponent (read)) 
(print (power(base exponent))) 

с STDIN в

2 
6 

Затем снова, STDERR выдает эту ошибку:

*** - EVAL: undefined function BASE

Почему аргумент B или основание не рассматривается в качестве переменной, но в функцию? Числовые значения самооценки так почему этот код не работает?

+1

Как вы пишете вызов функции? скобка arg0 arg1 ... argn закрывающая скобка. Правильно? Теперь что такое '(B (- E 1))'? Похоже на вызов функции. Только то, что говорит Лисп. Но B - переменная, а не функция. Так жалуется Лисп. Справедливо. –

+1

У меня вопрос о вашем вопросе, потому что в коде отсутствует правильный отступ. В принципе, у него нет никакого отступа. Измените свой вопрос и правильно отформатируйте код. –

+0

'(базовый экспонент)', который также является вызовом функции. не будет работать. –

ответ

1
(defun power (B E) 
    (if (= E 1) 
    B 
    (* B (power B (- E 1))))) 

... вы не можете добавить в «избыточные» круглые скобки в Lisp так, как вы можете, с некоторыми другими языками программирования.

+0

Это была действительно глупая ошибка. – RishbhSharma

+1

@RishbhSharma Это вместе с двойным пространством имен наиболее распространенный новичок натыкается. – Sylwester