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출력합니다 . 그러나 다음과 같은 차이점이 있습니다.

  • prin1은 객체를 값으로 반환합니다.

  • print는 선행 개행과 뒤에 공백이있는 객체를 인쇄합니다. 객체를 반환합니다.

  • pprint는 후행 공백이 생략된다는 점을 제외하면 print와 같습니다.

  • princ는 출력에 이스케이프 문자가 없다는 점을 제외하면 prin1과 같습니다.

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및 옵션 출력 스트림

  • 함수 finish-output output-stream으로 전송 된 모든 출력이 대상에 도달했는지 확인한 다음 nil을 반환합니다.

  • 함수 force-output 내부 버퍼 비우기를 시작하지만 완료 또는 승인을 기다리지 않고 nil을 반환합니다.

  • 함수 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