Đầu ra có điều kiện
GNU Common Lisp
~v^
Các up-and-out chỉ thị ~^
thường được sử dụng trong một danh sách định dạng hoạt động để chấm dứt sau khi mục danh sách cuối cùng. Tuy nhiên, nó cũng có thể được sử dụng với một công cụ v
sửa đổi để sử dụng một đối số, trong trường hợp đó, nó chấm dứt nếu đối số đó bằng không. Điều này đặc biệt hữu ích để đối phó với số không được tạo ra bởi dotimes
.
(loop as n from 1 to 10 do(format t"~d~%"n))
(dotimes(n 11)(if(> n 0)(format t"~d~%"n)))
(dotimes(n 11)(format t"~v^~d~%"n n))
format(condition)
Đối số đầu tiên để format
có thể là một trong t
, nil
hay còn gọi là ()
một luồng. Nếu được thông qua t
, nó sẽ xuất ra stdout
, nếu nil
nó sẽ trả về đầu ra được định dạng dưới dạng chuỗi. Điều này có thể được sử dụng đầu ra có điều kiện. Ví dụ trên có thể được viết bằng nhau như:
(dotimes(n 11)(format(> n 0)"~d~%"n))
Nếu một giá trị là đầu ra, giá trị trả về sẽ là nil
. Do đó, nó cũng có thể được sử dụng làm điều kiện kết thúc cho một do
vòng lặp:
(do((n 11))((<(decf n)1))(format t"~d~%"n))
(do((n 11))((format(>(decf n)0)"~d~%"n)))
~[...~]
Trình định dạng có điều kiện tiêu thụ một đối số và chọn một chuỗi định dạng từ danh sách theo chỉ mục. Một trường hợp sử dụng phổ biến là với trình định dạng mặc định ~:;
để chọn giữa 0 và không 0.
(dotimes(n 11)(format t"~v^~[~r~:;~d~]~%"n(mod n 3)n))
Các trình định dạng có điều kiện cũng có thể được lồng vào nhau, trong trường hợp đó, mỗi lần sẽ tiêu thụ một đối số.
~&
Trong mỗi ví dụ trên, ~%
được sử dụng để phát ra một dòng mới. Trong hầu hết các trường hợp, điều này có thể được thay thế bằng một dòng mới. Một tùy chọn khác là sử dụng ~&
, nó sẽ phát ra một dòng mới khi và chỉ khi con trỏ đầu ra không ở đầu dòng, còn gọi là a fresh-line
.
Cả hai ~%
và ~&
cũng có thể lấy một đối số, với một v
sửa đổi hoặc là một hằng số, và sẽ tạo ra nhiều dòng mới. Cả hai cũng sẽ vui vẻ chấp nhận một cuộc tranh luận tiêu cực, trong trường hợp đó họ không phát ra gì.
Tài liệu tham khảo bên ngoài
Thực hành chung Lisp
18. Một vài công thức FORMAT
Ngôn ngữ chung Lisp, Phiên bản 2
22.3.3. Định dạng đầu ra cho các luồng ký tự