Если вы хотите выводить данные в программе, вам нужно что-то напечатать.
(defun example ()
1000)
Приведенная выше функция ничего не печатает. Он просто возвращает число.
Если мы назовем его в read-eval-print-l oop:
CL-USER 134 > (defun example ()
1000)
EXAMPLE
CL-USER 135 > (example)
1000
Вы видите, что напечатано 1000. Но почему?
Мы запускаем его в READ-EVAL- PRINT -L OOP. Read, eval, PRINT , l oop.
Означает: система Lisp печатает возвращенное значение оценки, но не ваш код.
Сейчас мы добавляем print call:
CL-USER 136 > (defun example ()
(print 1000))
EXAMPLE
CL-USER 137 > (example)
1000
1000
Он печатается дважды!
CL-USER 137 > (example)
1000 ; <- the function example prints
1000 ; <- the read-eval-print-loop prints the result
Так что наша функция теперь печатает что-то сама, так как она вызывает PRINT
.
Теперь это работает:
CL-USER 138 > (defun call-the-example ()
(example)
(values))
CALL-THE-EXAMPLE
CL-USER 139 > (call-the-example)
1000
Мы можем вызвать функцию example
, функция что-то печатает, а REPL ничего не печатает.
REPL ничего не печатает, так как call-the-example
ничего не возвращает. Значение не возвращается.
Таким образом, вам нужно добавить вызов PRINT
Вы вправе добавить вызов печати, но причина в том, что раньше вы этого не делали печать и звонок на (input-name)
не печатался. Вы звонили (input-name)
в READ-EVAL-PRINT-L OOP, которая затем печатает результат. Не ваш код, но REPL выдал.
Стиль: неопределенная переменная
(defun foo ()
(setf bar 10) ; <- BAR is undefined
(print bar) ; <- BAR is undefined
(setf bar 20) ; <- BAR is undefined
(print bar)) ; <- BAR is undefined
Напишите это вместо - используя LET
для определения локальной переменной:
(defun foo ()
(let ((bar 10)) ; define BAR
(print bar) ; BAR is defined
(setf bar 20) ; BAR is defined
(print bar))) ; BAR is defined