LISP에서의 입력 , 출력
입출력 작용은 입출력 ( I / O )함수에 의해서 수행된다 .
I/O함수에는 read , print , prinl , print , terpri , format등이 있다.
Read : 인수를 취하지 않는다 , 키보드로부터 입력될 때까지 수행이 잠시 중단된다.
Ex ) ( + 5 (read))
6
è 11
인터프리터는 +함수를 발견하고서 , 수행하기 위해 인수를 찾는다 . 그러다가 read를 발견하고나서 잠시 중단이 된다 . 사용자가 6를 입력하게 되면 , read는 6을 인지하고 +함수를 수행한다 . 결론적으로 11이 반환이 되는 것이다.
Print : 하나의 인수를 취한다 . 인수를 받아들인 그대로 프린트하고 동시에 그 인수를 되돌려 준다 . 이것은 어떤 것을 프린트 함과 동시에 그것을 다른 함수에 인수로 제공하는 방식으로 수행이 된다 .
Ex) (print ‘(a b c))
è ( A B C )
è ( A B C )
(print “hello there”)
è “hello there”
è “hello there”
처음의 출력은 print가 그 인수를 프린트하고 리턴한 값이며 , 이 값은 다시 read-evaluate-print 루프로 보내져 프린트 되는데 , 그 값이 또 화면에 출력되기 때문이다 . 그리고 (“) 겹따옴표까지 인쇄한다는 것을 확인할 수 있음
Prinl :
Ex) ((prinl ‘(hello))(prinl ‘(hello)))
è (HELLO)(HELLO)
개행문자와 빈칸이 제공되지 않는 것을 제외하고는 print와 똑같다
개행문자는 줄바꿈이다
Princ : 출력에서 겹따옴표가 표시되는 것을 피할 수 있다. 겹따옴표를 프린트하지 않는 것을 제외하고는 prinl과 똑같다.
Ex) (princ “hello there”)
è hello there “hello there”
princ가 따옴표를 없애 주기는 하지만 , 여전히 똑 같은 문장이 반복되는 것 ( echo ) 문은 남아있다. 그 이유는 princ가 그 인수값을 되돌려 주고 , 그것이 마지막 문장이 였기 때문에 read-evaluate-print 루프에 의해서 또 프린트 되었기 때문이다. 아마 이것이 익숙치 않을 것인데 , 일반적인 프로그램에서 리턴값은 보통 그것이 다른 함수에 의해서 사용 or 흡수되기 때문에 화면에 출력되지 않는 것이다.
Terpri : 인수는 취하지 않는다 . 그것이 나타나는 곳에는 항상 새로운 라인이 생기며 , nil값을 되돌려 준다.
Ex) (defun circle-area( )
(terpri)
(princ “ please enter the radius : “)
(setq radius (read))
(princ “ the area of the circle is :”)
(princ (* 3.1416 radius radius))
(terpri))
CIRCLE-AREA
è (circle-area)
Please enter the radius : 4
The area of the circle is : 50.2656
우리는 이 결과를 통해서 princ 는 같은 라인에 여러 항목 (item)들을 출력하고 terpri는 새로운 라인을 생성한다는 것을 알 수 있다.
Format 함수 :
형태 : (format <destination> < string > arg1 arg2 … )이다.
여기서 <destination> 은 출력되는 곳 , 즉 모니터인지 , 외부 파일인지를 표시하는 것이다 .
T 는 디폴트 출력 ( default output ) 으로서 모니터를 뜻한다 .
< string > 은 출력될 문자열인데 , 각 인수들이 정확하게 어떻게 출력되어야 하는지를 뜻하는 포맷지시어들도 포함하고 있다.
포맷지시어들은 문자열내에서 인수들이 출력되는 순서와 동일한 순서로 나타난다.
각 지시어들은 그 것이 지시어임을 표시하는 기호로 틸드(tilde)문자 (~)를 항상 각 지시어 앞에 붙여준다 . 대표적인 포맷지시어들은 다음과 같다.
~A : princ가 사용된 것과 같이 인수가 출력된다.
~S : prinl이 사용된 것과 같이 인수가 출력된다.
~D : 정수인 인수가 10진수로 출력된다.
~F : 실수인 인수가 10진수 실수로 출력된다.
~C : 인수가 문자 출력으로 인쇄된다.
~% : 새로운 줄 ( new – line ) 이 출력된다.
인수값의 출력폭은 “~” 부호 바로 다음에 오는 정수로써 표시된다.
Ex)
(format t “Circle radius = ~2F~%Circle area = ~3F” x y)
“Circle radius = 3.0
Circle area = 9.42”
사용자의 값에 따른 x y 값을 2F , 3F 를 취해 줌으로써 formatting을 해준다 .
사용자가 x , y에 각각 실수 3.0과 9.42를 저장하였다고 가정하였을 시에 위에와 같은 값을 얻을 수 있다 .
'학부공부 > 인공지능' 카테고리의 다른 글
LISP 간단 정리 (0) | 2018.10.05 |
---|---|
LISP 간단 정리 (0) | 2018.10.05 |
LISP에서의 사용자 정의 함수 , 술어 함수 , 조건문 , 논리함수 (0) | 2018.10.03 |
LISP에서의 사용자 정의 함수 , 술어 함수 , 조건문 , 논리함수 (0) | 2018.10.03 |
LISP 문법과 산술연산 함수 (0) | 2018.09.30 |
#IT #먹방 #전자기기 #일상
#개발 #일상