2015-10-12 2 views
1

У меня есть следующий код:Odd (чтение) выпуск в Common Lisp (SBCL)

(defun Areacircle() 
    (princ "Enter Radius: ") 
    (defparameter radius (read)) 
    (defparameter area (* 3.1416 radius radius)) 
    (princ "Area: ") 
    (write area)) 
(AreaCircle) 

Проблема заключается в том, что слизь запускает его без проблем, но когда я скомпилировать его с (при компиляции файла «область .lisp ": output-file" area)) сначала оценивает (прочитанную) часть; он просит передать значение радиусу до печати чего-либо.

+1

Посмотрите в силовой выход. –

+2

Хотя это и не так плохо, необычно использовать 'defparameter' внутри функции, как вы. Кроме того, я бы написал функцию 'circle-area'. Джошуа Тейлор прав насчет принудительного вывода (http://clhs.lisp.se/Body/f_finish.htm) – coredump

ответ

1

Ничто в коде не заставляет (буферизованный) вывод отправлять на терминал. Добавление звонка в (force-output) или (finish-output) поможет.

Кроме того, вы используете defparameter, где вы должны использовать let. Возможно, вам также лучше использовать pi вместо вашего приближения и использовать format с подходящей строкой формата для печати результата.

+0

Это был хороший урок по хорошему синтаксису Lisp, он решил мою проблему. –

Смежные вопросы