2017-10-01 9 views
0

안녕하세요 newbie는 Lisp을 배우려고 노력하고 있습니다. 왜 lisp이 출력 결과의 끝에서 NIL을 인쇄하는지 혼란 스럽습니까? NIL을 출력하지 못하게하거나 if 문이 올바르게 설정되어 있지 않은가?LISP를 배우십시오. if 문을 사용하여 함수의 끝에서 NIL을 출력하는 이유는 무엇입니까?

[2]> (square 10) 
    number greater than 4 
    NIL 
+0

결과가 주어진 코드를 참조합니까? 코드가 함수를 '커다'로 정의하지만 결과에서 '평방'함수가 사용됩니다. – howlger

답변

2

함수의 바로 리턴 값이다 :

(defun greater (x) 
    (if (> x 4) 
    (message "number is greater than 4"))) 

는 결과를 가져옵니다. REPL (대화 형 평가)은 입력 한 각 표현식의 결과를 표시합니다. greater 함수 호출 결과는 NIL입니다.

+0

@RainerJoswig 귀하의 편집에 동의하지 않습니다. "대화식 평가"란 무엇을 의미합니까? – melpomene

+0

REPL에있는 E는 '해석기'가 아닌'eval'의 약자입니다. 평가에서는 SBCL 및 CCL과 같이 컴파일러를 사용할 수 있습니다. 이 경우 CLISP에는 통역사 기반 REPL이 있지만 일반적으로 그렇지 않습니다. –

+0

REPL은 인터랙티브 인터프리터입니다. 평가 부분은 대화 형이 아닙니다 : 양식을 입력하고 평가를 위해 통역사에게 보내고 결과를 다시 얻습니다. – melpomene

3

모든 최상위 양식은 Read-Eval-Print-Loop에서 인쇄합니다. 물론

;;; make a main function 
(defun main() 
    ;; all your program top level forms here! 
    (values)) ; empty values return no value and the REPL will not print anything when your program terminates 

;; call main 
(main) 

을 당신이 (+ 2 3)를 입력하고 인쇄 문에 포장 할 필요없이 5을 다시 얻을 수 있도록 인쇄 결과를 원하는 대화 형 세션 : 여기를 방지하는 방법입니다.