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:
|
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
|
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