수색…


매개 변수

람다리스트 (format DESTINATION CONTROL-STRING &REST FORMAT-ARGUMENTS)
DESTINATION 쓰는 것. 이것은 출력 스트림, t ( *standard-output* 줄임말) 또는 nil (쓰기 위해 문자열을 생성) 일 수 있습니다.
CONTROL-STRING 템플릿 스트링 그것은 원시 문자열 일 수도 있고, 추가 인수를 지정하고 어떻게 든 변환하는 물결표가 붙은 명령 지시문을 포함 할 수도 있습니다.
FORMAT-ARGUMENTS 주어진 CONTROL-STRING 요구하는 잠재적 추가적 주장.

비고

FORMAT 지시문에 대한 CLHS 설명서는 22.3 절 에서 찾을 수 있습니다. SLIME을 사용하면 Cc Cd ~ 를 입력하여 특정 형식 지시문에 대한 CLHS 설명서를 조회 할 수 있습니다.

기본 사용법 및 간단한 지시문

형식을 지정하는 처음 두 인수는 출력 스트림과 제어 문자열입니다. 기본 사용에는 추가 인수가 필요하지 않습니다. 스트림을 *standard-output* 쓰면 t 를 전달합니다.

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

이 표현식은 Basic Message 를 표준 출력에 쓰고 nil 리턴합니다.

스트림으로 nil 을 전달하면 새 문자열이 만들어지고 반환됩니다.

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

대부분의 제어 문자열 지시문에는 추가 인수가 필요합니다. ~a 지시어 ( "aesthetic")는 princ 프로 시저에서와 같이 모든 인수를 인쇄합니다. 이렇게하면 이스케이프 문자없이 양식이 인쇄됩니다 (키워드는 콜론 앞에 나오지 않고 문자열은 둘러싼 따옴표없이 인쇄됩니다).

> (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 추가 입력에 따라 선택적으로 오른쪽 또는 왼쪽 패드 입력.

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

~s 지시문은 ~a 와 비슷하지만 이스케이프 문자를 인쇄합니다.

> (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\""

리스트 반복하기

~{~} 지시어를 사용하여 목록을 반복 할 수 있습니다.

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

~^ 요소가 더 이상 남아 있지 않으면 이스케이프하는 데 사용할 수 있습니다.

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

숫자 인자는 반복 수를 제한하기 위해 ~{ 에 주어질 수 있습니다 :

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

~@{ 목록 대신 나머지 인수를 반복합니다.

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

하위 목록은 ~:{ :를 사용하여 반복 될 수 있습니다.

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

조건식

조건식은 ~[~] 할 수 있습니다. 표현식의 절은 ~; 사용하여 구분됩니다 ~; .

기본적으로 ~[ 는 인수 목록에서 정수를 취하여 해당 절을 선택합니다. 절은 0부터 시작합니다.

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

마지막 절은 ~:; 로 분리 할 수 ​​있습니다 ~:; 대신 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!

조건식이 ~:[ ,로 시작하면 정수 대신 일반화 된 부울 을 기대합니다. 두 개의 절만있을 수 있습니다. 부울이 NIL 이면 첫 번째 문구가 인쇄되고 사실이면 두 번째 문구가 인쇄됩니다.

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

조건부 표현식이 ~@[ 시작하면, 하나의 절이 있어야하는데, 이는 일반화 된 부울 입력이 사실 일 경우에만 인쇄됩니다. 부울은 사실이라면 소비되지 않습니다.

(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
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow