LISP - Đầu vào & Đầu ra

LISP chung cung cấp nhiều chức năng đầu vào-đầu ra. Chúng tôi đã sử dụng chức năng định dạng và chức năng in cho đầu ra. Trong phần này, chúng ta sẽ xem xét một số hàm đầu vào - đầu ra được sử dụng phổ biến nhất được cung cấp trong LISP.

Các chức năng đầu vào

Bảng sau cung cấp các hàm đầu vào được sử dụng phổ biến nhất của LISP:

Sr.No. Mô tả chức năng
1

read& tùy chọn input-stream eof-error-p eof-value recursive-p

Nó đọc trong biểu diễn in của một đối tượng Lisp từ luồng đầu vào, xây dựng một đối tượng Lisp tương ứng và trả về đối tượng.

2

read-preserving-whitespace& tùy chọn trong luồng eof-error-p eof-value đệ quy-p

Nó được sử dụng trong một số tình huống chuyên biệt, nơi muốn xác định chính xác ký tự nào đã kết thúc mã thông báo mở rộng.

3

read-line& tùy chọn input-stream eof-error-p eof-value recursive-p

Nó đọc trong một dòng văn bản được kết thúc bằng một dòng mới.

4

read-char& tùy chọn input-stream eof-error-p eof-value recursive-p

Nó lấy một ký tự từ luồng đầu vào và trả về dưới dạng đối tượng ký tự.

5

unread-char ký tự & luồng đầu vào tùy chọn

Nó đặt ký tự được đọc gần đây nhất từ ​​luồng đầu vào, lên phía trước luồng đầu vào.

6

peek-char& tùy chọn kiểu peek-type input-stream eof-error-p eof-value đệ quy-p

Nó trả về ký tự tiếp theo được đọc từ luồng đầu vào, mà không thực sự xóa nó khỏi luồng đầu vào.

7

listen& luồng đầu vào tùy chọn

Vị ngữ listen là true nếu có một ký tự ngay lập tức từ input-stream và là false nếu không.

số 8

read-char-no-hang& tùy chọn input-stream eof-error-p eof-value recursive-p

Nó tương tự như read-char, nhưng nếu nó không nhận được một ký tự, nó không đợi một ký tự, mà trả về nil ngay lập tức.

9

clear-input& luồng đầu vào tùy chọn

Nó xóa bất kỳ đầu vào được đệm nào được liên kết với luồng đầu vào.

10

read-from-string chuỗi & tùy chọn eof-error-p eof-value & key: start: end: keep-whitespace

Nó lấy các ký tự của chuỗi liên tiếp và xây dựng một đối tượng LISP và trả về đối tượng. Nó cũng trả về chỉ số của ký tự đầu tiên trong chuỗi không được đọc, hoặc độ dài của chuỗi (hoặc, độ dài +1), tùy từng trường hợp.

11

parse-integer string & key: start: end: radix: junk-allow

Nó kiểm tra chuỗi con của chuỗi được phân cách bởi: start và: end (mặc định là đầu và cuối của chuỗi). Nó bỏ qua các ký tự khoảng trắng và sau đó cố gắng phân tích cú pháp một số nguyên.

12

read-byte binary-input-stream & eof-error-p eof-value tùy chọn

Nó đọc một byte từ luồng nhị phân-đầu vào và trả về dưới dạng một số nguyên.

Đọc đầu vào từ bàn phím

Các readđược sử dụng để lấy đầu vào từ bàn phím. Nó có thể không có bất kỳ đối số.

Ví dụ: hãy xem xét đoạn mã -

(write ( + 15.0 (read)))

Giả sử người dùng nhập 10.2 từ Đầu vào STDIN, nó trả về,

25.2

Hàm read đọc các ký tự từ luồng đầu vào và giải thích chúng bằng cách phân tích cú pháp dưới dạng các đại diện của các đối tượng Lisp.

Thí dụ

Tạo tệp mã nguồn mới có tên main.lisp và nhập mã sau vào đó:

; 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)

Khi bạn thực thi mã, nó trả về kết quả sau:

Enter Radius: 5 (STDIN Input)
Area: 78.53999

Thí dụ

Tạo một tệp mã nguồn mới có tên main.lisp và nhập mã sau vào đó.

(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)
)

Khi bạn thực thi mã, nó trả về kết quả sau:

#\W 
#\e 
#\l 
#\c 
#\o 
#\m 
#\e 
#\Space 
#\t 
#\o 
#\Space

Các chức năng đầu ra

Tất cả các hàm đầu ra trong LISP nhận một đối số tùy chọn được gọi là luồng đầu ra, nơi đầu ra được gửi. Nếu không được đề cập hoặc không, luồng đầu ra mặc định là giá trị của biến * tiêu chuẩn đầu ra *.

Bảng sau cung cấp các chức năng đầu ra được sử dụng phổ biến nhất của LISP:

Sr.No. Chức năng và Mô tả
1

write object & key: stream: Escape: radix: base: circle: pretty: level: length: case: gensym: array

write object & key: stream: Escape: radix: base: circle: pretty: level: length: case: gensym: array: read Reading: right-margin: miser-width: lines: pprint-Dispatch

Cả hai đều ghi đối tượng vào luồng đầu ra được chỉ định bởi: stream, mặc định là giá trị của * standard-output *. Các giá trị khác được đặt mặc định cho các biến toàn cục tương ứng được đặt để in.

2

prin1 đối tượng & luồng đầu ra tùy chọn

print đối tượng & luồng đầu ra tùy chọn

pprint đối tượng & luồng đầu ra tùy chọn

princ đối tượng & luồng đầu ra tùy chọn

Tất cả các hàm này xuất ra biểu diễn in của đối tượng tới luồng xuất . Tuy nhiên, có những điểm khác biệt sau:

  • Prince1 trả về đối tượng dưới dạng giá trị của nó.

  • print in đối tượng với một dòng mới đứng trước và theo sau là một khoảng trắng. Nó trả về đối tượng.

  • pprint cũng giống như in ngoại trừ khoảng trắng ở cuối bị bỏ qua.

  • princ giống như Prince1 ngoại trừ đầu ra không có ký tự thoát

3

write-to-string đối tượng & khóa : Escape: radix: base: circle: pretty: level: length: case: gensym: array

write-to-string đối tượng & khóa: thoát: cơ số: cơ sở: hình tròn: khá: cấp độ: chiều dài: trường hợp: gensym: mảng: đọc được: lề phải: chiều rộng sai: dòng: pprint-phái

prin1-to-string vật

princ-to-string vật

Đối tượng được in hiệu quả và các ký tự đầu ra được tạo thành một chuỗi, được trả về.

4

write-char ký tự & luồng đầu ra tùy chọn

Nó xuất ký tự ra luồng xuất và trả về ký tự.

5

write-string string & output-stream & key tùy chọn : start: end

Nó ghi các ký tự của chuỗi con được chỉ định của chuỗi vào luồng xuất.

6

write-line string & output-stream & key tùy chọn : start: end

Nó hoạt động theo cách tương tự như write-string, nhưng xuất ra một dòng mới sau đó.

7

terpri& luồng đầu ra tùy chọn

Nó xuất ra một dòng mới cho dòng xuất.

số 8

fresh-line& luồng đầu ra tùy chọn

nó chỉ xuất ra một dòng mới nếu dòng chưa ở đầu dòng.

9

finish-output& luồng đầu ra tùy chọn

force-output& luồng đầu ra tùy chọn

clear-output& luồng đầu ra tùy chọn

  • Chức năng finish-output cố gắng đảm bảo rằng tất cả đầu ra được gửi đến luồng đầu ra đã đến đích và chỉ sau đó trả về số không.

  • Chức năng force-output bắt đầu làm trống bất kỳ bộ đệm nội bộ nào nhưng trả về nil mà không cần đợi hoàn thành hoặc xác nhận.

  • Chức năng clear-output cố gắng hủy bỏ bất kỳ hoạt động đầu ra nào đang diễn ra để cho phép đầu ra tiếp tục đến đích càng ít càng tốt.

10

write-byte số nguyên nhị phân-đầu ra-luồng

Nó ghi một byte, giá trị của số nguyên.

Thí dụ

Tạo một tệp mã nguồn mới có tên main.lisp và nhập mã sau vào đó.

; 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)

Khi bạn thực thi mã, nó trả về kết quả sau:

Enter Number : 3456.78 (STDIN Input)
The Number: 3456.78
The Number Doubled: 6913.56

Đầu ra được định dạng

Chức năng formatđược sử dụng để tạo ra văn bản có định dạng độc đáo. Nó có cú pháp sau:

format destination control-string &rest arguments

Ở đâu,

  • đích là đầu ra tiêu chuẩn
  • chuỗi điều khiển giữ các ký tự được xuất ra và lệnh in.

A format directive bao gồm dấu ngã (~), các tham số tiền tố tùy chọn được phân tách bằng dấu phẩy, dấu hai chấm tùy chọn (:) và bổ ngữ dấu (@) và một ký tự cho biết đây là loại lệnh nào.

Các tham số tiền tố thường là số nguyên, được ký hiệu là số thập phân có dấu tùy chọn.

Bảng sau đây cung cấp mô tả ngắn gọn về các lệnh thường được sử dụng:

Sr.No. Chỉ thị & Mô tả
1

~A

Theo sau là các đối số ASCII.

2

~S

Theo sau là biểu thức S.

3

~D

Đối với các đối số thập phân.

4

~B

Đối với các đối số nhị phân.

5

~O

Đối với các đối số bát phân.

6

~X

Đối với các đối số thập lục phân.

7

~C

Đối với các đối số ký tự.

số 8

~F

Đối với các đối số dấu phẩy động có định dạng cố định.

9

~E

Đối số dấu phẩy động hàm mũ.

10

~$

Đối số đô la và dấu phẩy động.

11

~%

Một dòng mới được in.

12

~*

Đối số tiếp theo bị bỏ qua.

13

~?

Sự chuyển hướng. Đối số tiếp theo phải là một chuỗi và đối số sau nó là một danh sách.

Thí dụ

Hãy để chúng tôi viết lại chương trình tính diện tích hình tròn -

Tạo một tệp mã nguồn mới có tên main.lisp và nhập mã sau vào đó.

(defun AreaOfCircle()
   (terpri)
   (princ "Enter Radius: ")
   (setq radius (read))
   (setq area (* 3.1416 radius radius))
   (format t "Radius: = ~F~% Area = ~F" radius area)
)
(AreaOfCircle)

Khi bạn thực thi mã, nó trả về kết quả sau:

Enter Radius: 10.234 (STDIN Input)
Radius: = 10.234
Area = 329.03473