Szukaj…


Parametry

Lambda-List (format DESTINATION CONTROL-STRING &REST FORMAT-ARGUMENTS)
DESTINATION rzecz do pisania. Może to być strumień wyjściowy, t (skrót dla *standard-output* ) lub nil (co tworzy ciąg do zapisu)
CONTROL-STRING ciąg szablonu. Może to być prymitywny ciąg znaków lub zawierać poprzedzone tyldą dyrektywy polecenia, które określają i w jakiś sposób przekształcają dodatkowe argumenty.
FORMAT-ARGUMENTS potencjalne dodatkowe argumenty wymagane przez dany CONTROL-STRING .

Uwagi

Dokumentację CLHS dla dyrektyw FORMAT można znaleźć w rozdziale 22.3 . Za pomocą SLIME można wpisać Cc Cd ~ aby wyszukać w dokumentacji CLHS konkretną dyrektywę formatu.

Podstawowe użycie i proste dyrektywy

Pierwsze dwa argumenty do sformatowania to strumień wyjściowy i łańcuch kontrolny. Podstawowe użycie nie wymaga dodatkowych argumentów. Przekazywanie t podczas zapisu strumienia do *standard-output* .

> (format t "Basic Message")
Basic Message
nil

To wyrażenie wypisze Basic Message na standardowe wyjście i zwróci nil .

Przekazywanie wartości nil jako strumienia tworzy nowy ciąg i zwraca go.

> (format nil "Basic Message")
"Basic Message"

Większość dyrektyw dotyczących ciągów kontrolnych wymaga dodatkowych argumentów. ~a Dyrektywa („estetyczna”) wypisze każdy argument, tak jak w procedurze princ . Spowoduje to wydrukowanie formularza bez żadnych znaków zmiany znaczenia (słowa kluczowe są drukowane bez wiodącego dwukropka, ciągi bez otaczających je cudzysłowów itp.).

> (format nil "A Test: ~a" 42)
"A Test: 42"
> (format nil "Multiples: ~a ~a ~a ~a" 1 (list 2 3) "four five" :six)
"Multiples: 1 (2 3) four five SIX"
> (format nil "A Test: ~a" :test)
"A Test: TEST"
> (format nil "A Test: ~a" "Example")
"A Test: Example"

~a opcjonalnie prawy lub lewy pad-pad oparty na dodatkowych wejściach.

> (format nil "A Test: ~10a" "Example")
"A Test: Example   "
> (format nil "A Test: ~10@a" "Example")
"A Test:    Example"

Dyrektywa ~s jest jak ~a , ale drukuje znaki specjalne.

> (format nil "A Test: ~s" 42)
"A Test: 42"
> (format nil "Multiples: ~s ~s ~s ~s" 1 (list 2 3) "four five" :six)
"Multiples: 1 (2 3) \"four five\" :SIX"
> (format nil "A Test: ~s" :test)
"A Test: :TEST"
> (format nil "A Test: ~s" "Example")
"A Test: \"Example\""

Iterowanie po liście

Można iterować po liście za pomocą dyrektyw ~{ i ~} .

CL-USER> (format t "~{~a, ~}~%" '(1 2 3 4 5))
1, 2, 3, 4, 5, 

~^ można użyć do ucieczki, jeśli nie ma już więcej elementów.

CL-USER> (format t "~{~a~^, ~}~%" '(1 2 3 4 5))
1, 2, 3, 4, 5

Argument numeryczny można podać do ~{ celu ograniczenia liczby iteracji:

CL-USER> (format t "~3{~a~^, ~}~%" '(1 2 3 4 5))
1, 2, 3, 

~@{ przejdzie do pozostałych argumentów zamiast listy:

CL-USER> (format t "~a: ~@{~a~^, ~}~%" :foo 1 2 3 4 5)
FOO: 1, 2, 3, 4, 5

Podlisty można powtarzać za pomocą ~:{ :

CL-USER> (format t "~:{(~a, ~a) ~}~%" '((1 2) (3 4) (5 6)))
(1, 2) (3, 4) (5, 6) 

Wyrażenia warunkowe

Wyrażenia warunkowe można wykonać za pomocą ~[ i ~] . Klauzule wyrażenia są oddzielane za pomocą ~; .

Domyślnie ~[ pobiera liczbę całkowitą z listy argumentów i wybiera odpowiednią klauzulę. Klauzule zaczynają się od zera.

(format t "~@{~[First clause~;Second clause~;Third clause~;Fourth clause~]~%~}"
        0 1 2 3)
; First clause
; Second clause
; Third clause
; Fourth clause

Ostatnią klauzulę można oddzielić ~:; zamiast tego uczyni to klauzulą else.

(format t "~@{~[First clause~;Second clause~;Third clause~:;Too high!~]~%~}"
        0 1 2 3 4 5)
; First clause
; Second clause
; Third clause
; Too high!
; Too high!
; Too high!

Jeśli wyrażenie warunkowe zaczyna się od ~:[ , oczekuje uogólnionego logicznego wyniku zamiast liczby całkowitej. Może mieć tylko dwie klauzule; pierwsza jest drukowana, jeśli wartość logiczna to NIL , a druga klauzula, jeśli jest prawdziwa.

(format t "~@{~:[False!~;True!~]~%~}"
        t nil 10 "Foo" '())
; True!
; False!
; True!
; True!
; False!

Jeśli wyrażenie warunkowe zaczyna się od ~@[ , powinna istnieć tylko jedna klauzula, która jest wypisywana, jeśli dane wejściowe, uogólniony boolean, były prawdziwe. Wartość logiczna nie zostanie skonsumowana, jeśli będzie zgodna z prawdą.

(format t "~@{~@[~s is truthy!~%~]~}"
        t nil 10 "Foo" '())
; T is truthy!
; 10 is truthy!
; "Foo" is truthy!


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow