LISP-입력 및 출력
Common LISP는 다양한 입출력 기능을 제공합니다. 우리는 이미 출력을 위해 포맷 기능과 인쇄 기능을 사용했습니다. 이 섹션에서는 LISP에서 제공하는 가장 일반적으로 사용되는 입출력 함수 중 일부를 살펴 보겠습니다.
입력 기능
다음 표는 LISP에서 가장 일반적으로 사용되는 입력 함수를 제공합니다.
Sr. 아니. | 기능 및 설명 |
---|---|
1 | read및 선택적 입력 스트림 eof-error-p eof-value recursive-p 입력 스트림에서 Lisp 객체의 인쇄 된 표현을 읽고 해당 Lisp 객체를 빌드 한 다음 객체를 반환합니다. |
2 | read-preserving-whitespace& 선택적 인스 트림 eof-error-p eof-value recursive-p 확장 토큰을 종료 한 문자를 정확하게 결정하는 것이 바람직한 일부 특수 상황에서 사용됩니다. |
삼 | read-line및 선택적 입력 스트림 eof-error-p eof-value recursive-p 줄 바꿈으로 끝나는 텍스트 줄을 읽습니다. |
4 | read-char및 선택적 입력 스트림 eof-error-p eof-value recursive-p 입력 스트림에서 한 문자를 가져와 문자 객체로 반환합니다. |
5 | unread-char 문자 및 선택적 입력 스트림 입력 스트림에서 가장 최근에 읽은 문자를 입력 스트림의 전면에 놓습니다. |
6 | peek-char& 선택적 peek-type 입력 스트림 eof-error-p eof-value recursive-p 입력 스트림에서 실제로 제거하지 않고 입력 스트림에서 읽을 다음 문자를 반환합니다. |
7 | listen및 선택적 입력 스트림 술어 listen 입력 스트림에서 즉시 사용할 수있는 문자가 있으면 true이고 그렇지 않으면 false입니다. |
8 | read-char-no-hang및 선택적 입력 스트림 eof-error-p eof-value recursive-p 유사하다 read-char그러나 문자를 얻지 못하면 문자를 기다리지 않고 즉시 nil을 반환합니다. |
9 | clear-input및 선택적 입력 스트림 입력 스트림 과 관련된 버퍼링 된 입력을 지 웁니다 . |
10 | read-from-string 문자열 및 선택적 eof-error-p eof-value 및 키 : start : end : preserve-whitespace 연속적으로 문자열의 문자를 취하고 LISP 오브젝트를 빌드하고 오브젝트를 리턴합니다. 또한 읽지 않은 문자열에서 첫 번째 문자의 인덱스 또는 경우에 따라 문자열의 길이 (또는 길이 +1)를 반환합니다. |
11 | parse-integer 문자열 및 키 : start : end : radix : junk-allowed : start 및 : end로 구분 된 문자열의 하위 문자열을 검사합니다 (기본값은 문자열의 시작과 끝). 공백 문자를 건너 뛰고 정수 구문 분석을 시도합니다. |
12 | read-byte 바이너리 입력 스트림 및 선택적 eof-error-p eof-value 바이너리 입력 스트림에서 1 바이트를 읽어 정수 형태로 반환합니다. |
키보드에서 입력 읽기
그만큼 read기능은 키보드에서 입력을받는 데 사용됩니다. 어떤 논쟁도 할 수 없습니다.
예를 들어, 코드 스 니펫을 고려하십시오.
(write ( + 15.0 (read)))
사용자가 STDIN 입력에서 10.2를 입력했다고 가정하면 다음을 반환합니다.
25.2
read 함수는 입력 스트림에서 문자를 읽고 Lisp 객체의 표현으로 구문 분석하여 해석합니다.
예
main.lisp라는 새 소스 코드 파일을 만들고 다음 코드를 입력합니다.
; the function AreaOfCircle
; calculates area of a circle
; when the radius is input from keyboard
(defun AreaOfCircle()
(terpri)
(princ "Enter Radius: ")
(setq radius (read))
(setq area (* 3.1416 radius radius))
(princ "Area: ")
(write area))
(AreaOfCircle)
코드를 실행하면 다음 결과가 반환됩니다.
Enter Radius: 5 (STDIN Input)
Area: 78.53999
예
main.lisp라는 새 소스 코드 파일을 만들고 그 안에 다음 코드를 입력합니다.
(with-input-from-string (stream "Welcome to Tutorials Point!")
(print (read-char stream))
(print (read-char stream))
(print (read-char stream))
(print (read-char stream))
(print (read-char stream))
(print (read-char stream))
(print (read-char stream))
(print (read-char stream))
(print (read-char stream))
(print (read-char stream))
(print (peek-char nil stream nil 'the-end))
(values)
)
코드를 실행하면 다음 결과가 반환됩니다.
#\W
#\e
#\l
#\c
#\o
#\m
#\e
#\Space
#\t
#\o
#\Space
출력 기능
LISP의 모든 출력 함수 는 출력이 전송되는 output-stream 이라는 선택적 인수를 사용 합니다. 언급되지 않거나 nil 인 경우 output-stream은 기본적으로 변수 * standard-output * 값으로 설정됩니다.
다음 표는 LISP의 가장 일반적으로 사용되는 출력 함수를 제공합니다.
Sr. 아니. | 기능 및 설명 |
---|---|
1 | write 객체 및 키 : 스트림 : 탈출 : radix : base : circle : pretty : level : length : case : gensym : array write 객체 및 키 : 스트림 : 탈출 : radix : base : circle : pretty : level : length : case : gensym : array : readably : right-margin : miser-width : lines : pprint-dispatch 둘 다 : stream에 의해 지정된 출력 스트림에 객체를 씁니다. 기본값은 * standard-output *입니다. 다른 값은 기본적으로 인쇄를 위해 설정된 해당 전역 변수로 설정됩니다. |
2 | prin1 개체 및 선택적 출력 스트림 print 개체 및 선택적 출력 스트림 pprint 개체 및 선택적 출력 스트림 princ 개체 및 선택적 출력 스트림 이 모든 함수는 object의 인쇄 된 표현을 output-stream 에 출력합니다 . 그러나 다음과 같은 차이점이 있습니다.
|
삼 | write-to-string 객체 및 키 : 탈출 : radix : base : circle : pretty : level : length : case : gensym : array write-to-string 객체 및 키 : 탈출 : radix : base : circle : pretty : level : length : case : gensym : array : readably : right-margin : miser-width : lines : pprint-dispatch prin1-to-string 목적 princ-to-string 목적 객체가 효과적으로 인쇄되고 출력 문자가 문자열로 만들어져 반환됩니다. |
4 | write-char 문자 및 선택적 출력 스트림 문자를 출력 스트림에 출력하고 문자를 반환합니다. |
5 | write-string 문자열 및 선택적 출력 스트림 및 키 : start : end 그것은 지정된 문자열의 문자 기록 문자열을 받는 출력 스트림입니다. |
6 | write-line 문자열 및 선택적 출력 스트림 및 키 : start : end write-string과 동일한 방식으로 작동하지만 나중에 개행을 출력합니다. |
7 | terpri및 옵션 출력 스트림 출력 스트림에 개행을 출력합니다. |
8 | fresh-line및 옵션 출력 스트림 스트림이 이미 줄의 시작 부분에 있지 않은 경우에만 개행을 출력합니다. |
9 | finish-output및 옵션 출력 스트림 force-output및 옵션 출력 스트림 clear-output및 옵션 출력 스트림
|
10 | write-byte 정수 이진 출력 스트림 정수 값인 1 바이트를 씁니다 . |
예
main.lisp라는 새 소스 코드 파일을 만들고 그 안에 다음 코드를 입력합니다.
; this program inputs a numbers and doubles it
(defun DoubleNumber()
(terpri)
(princ "Enter Number : ")
(setq n1 (read))
(setq doubled (* 2.0 n1))
(princ "The Number: ")
(write n1)
(terpri)
(princ "The Number Doubled: ")
(write doubled)
)
(DoubleNumber)
코드를 실행하면 다음 결과가 반환됩니다.
Enter Number : 3456.78 (STDIN Input)
The Number: 3456.78
The Number Doubled: 6913.56
형식화 된 출력
함수 format멋진 형식의 텍스트를 생성하는 데 사용됩니다. 다음과 같은 구문이 있습니다.
format destination control-string &rest arguments
어디,
- 대상은 표준 출력입니다.
- control-string은 출력 할 문자와 인쇄 지시문을 보유합니다.
ㅏ format directive 물결표 (~), 쉼표로 구분 된 선택적 접 두부 매개 변수, 선택적 콜론 (:) 및 at- 기호 (@) 수정 자, 이것이 어떤 종류의 지시문인지를 나타내는 단일 문자로 구성됩니다.
접두사 매개 변수는 일반적으로 정수이며 선택적으로 부호있는 십진수로 표시됩니다.
다음 표는 일반적으로 사용되는 지시문에 대한 간략한 설명을 제공합니다.
Sr. 아니. | 지침 및 설명 |
---|---|
1 | ~A ASCII 인수가 뒤에옵니다. |
2 | ~S S- 표현이 뒤 따릅니다. |
삼 | ~D 10 진수 인수의 경우. |
4 | ~B 이진 인수의 경우. |
5 | ~O 8 진 인수의 경우. |
6 | ~X 16 진 인수의 경우. |
7 | ~C 문자 인수 용. |
8 | ~F 고정 형식 부동 소수점 인수의 경우. |
9 | ~E 지수 부동 소수점 인수. |
10 | ~$ 달러 및 부동 소수점 인수. |
11 | ~% 새 줄이 인쇄됩니다. |
12 | ~* 다음 인수는 무시됩니다. |
13 | ~? 우회. 다음 인수는 문자열이어야하며 그 다음 인수는 목록이어야합니다. |
예
원의 면적을 계산하는 프로그램을 다시 작성해 보겠습니다.
main.lisp라는 새 소스 코드 파일을 만들고 그 안에 다음 코드를 입력합니다.
(defun AreaOfCircle()
(terpri)
(princ "Enter Radius: ")
(setq radius (read))
(setq area (* 3.1416 radius radius))
(format t "Radius: = ~F~% Area = ~F" radius area)
)
(AreaOfCircle)
코드를 실행하면 다음 결과가 반환됩니다.
Enter Radius: 10.234 (STDIN Input)
Radius: = 10.234
Area = 329.03473