형식(공통 LISP)

Format (Common Lisp)

포맷printf 포맷 문자열과 유사한 포맷 문자열을 사용하여 포맷된 텍스트를 생성할 수 있는 Common Lisp 함수입니다.보다 많은 기능을 제공합니다.printf사용자는 특정 조건에서만 특정 형식 지정자를 적용하고 데이터 구조에서 반복하며 표 형식으로 출력할 수 있습니다.이 기능은 멀티틱스기반으로 한 MIT의 Lisp Machine Lisp에서 비롯되었습니다. ioa_를 클릭합니다[citation needed].

사양

format함수는 구문에[1] 의해 지정됩니다.

format destination control String & rest format Arguments

제어 문자열 내의 지시어는 포맷 인수를 사용하여 보간되며, 이렇게 구성된 문자 시퀀스가 수신처에 입력된다.

목적지

수신처는 스트림, 다이내믹 문자열,T또는NILconstant. 후자는 새로운 문자열 오브젝트를 작성, 포맷 및 반환하는 특수한 경우를 나타냅니다.T는 통상 콘솔과 동등한 표준 출력을 나타냅니다.Common Lisp의 스트림은 특히 문자열 출력과 파일 스트림을 이해하며, 따라서 이러한 다양한 대상에 쓸 수 있기 때문에 이 함수는 C와 같은 다른 프로그래밍 언어의 개별 명령 간에 분산되는 기능을 통합합니다.printf콘솔 출력의 경우sprintf스트링 포맷의 경우fprintf파일 쓰기용입니다.

다수의 행선지 타입을 다음에 나타냅니다.

;; 표준 출력에 "1 + 2 = 3"을 인쇄하고 "NIL"을 반환합니다. (포맷 T "1 + 2 = ~d" 3)  ;; "1 + 2 = 3"을 포함하는 새 문자열을 만들고 반환합니다. (포맷 없음 "1 + 2 = ~d" 3)  ;; "1 + 2 = 3"을 포함하는 새 문자열을 만들고 반환합니다. (출력에서 스트링으로 (산출량)   (포맷 산출량 "1 + 2 = ~d" 3))  ;; 문자열 "1 + 2 = 3"을 "outputFile.txt" 파일에 씁니다. (오픈 파일 포함 (산출량 "output File.txt"                   : 방향         : 출력                   : 존재하지 않는 경우 :작성                   : if-interface(예: if-interface)         : 개요)   (포맷 산출량 "1 + 2 = ~d" 3))  ;; 동적 문자열에 문자열 "1 + 2 = 3"을 추가합니다. (허락하다 ((출력 문자열 (제조 배열 0                        : syslog-type(유형) '캐릭터                        : 조정 가능 T                        : 충전재 삽입 0)))   (선언하다 (유형 스트링 출력 문자열))   (포맷 출력 문자열 "1 + 2 = ~d" 3)   ( 스트링 출력 문자열)) 

제어 문자열 및 형식 인수

제어 문자열에는 메타 문자뿐만 아니라 리터럴 문자를 포함할 수 있습니다.~(tilde), 형식 지시어를 정의합니다.입력의 리터럴은 문자 그대로 반복되지만 지시어는 종종 하나 이상의 형식 인수를 소비하는 특별한 출력을 생성합니다.

지시 사항

에 의해 도입된 포맷 디렉티브~그 뒤에 0 이상의 프레픽스파라미터, 0 이상의 수식자 및 디렉티브타입이 계속됩니다.따라서 지시적 정의는 패턴에 부합해야 합니다.

~ [ prefix Parameters ][ modifiers ]directive Type

지시어 유형은 항상 단일 문자로 지정되며 대소문자를 구분하지 않습니다.format 디렉티브에 의해 처리되는 데이터는 필요에 따라 format 인수라고 불리며 호환성이 있는 임의의 유형의 오브젝트일 수 있습니다.이러한 데이터의 수용 여부와 수용량은 적용되는 지시어와 잠재적 수식어에 따라 달라집니다.지시어 유형~%예를 들어, 는 형식 인수를 사용하지 않습니다.~d인쇄하는 정수는 1개뿐입니다.~@{at-sign 수식자의 영향을 받는 디렉티브는 나머지 인수를 모두 처리합니다.

다음 지시사항,~b는 format 인수에서1개의 숫자 객체를 상정하고 표준 출력과 동등한 바이너리(기수 2)를 씁니다.

(포맷 T "~b" 5) 

설정이 허용되는 경우 프리픽스 파라미터를 지정할 수 있습니다.

프리픽스 파라미터

프리픽스 파라미터를 사용하면 조작하는 디렉티브에 추가 정보를 주입할 수 있습니다.이는 함수에 제공되는 파라미터의 조작과 유사합니다.프리픽스 파라미터는 항상 옵션이며, 지정되어 있는 경우 도입부 사이에 배치해야 합니다.~수식자 또는 지시어 타입(존재하지 않는 경우) 중 하나를 지정합니다.값은 쉼표로 구분되지만 양쪽에서 공백 공간을 사용할 수 없습니다.이들 파라미터의 수와 유형은 잠재적인 수식어의 지시어와 영향에 따라 달라집니다.

다음 2개의 문자를 고유한 해석을 가진 프레픽스파라미터 값으로 사용할 수 있습니다.v또는V는 포맷 인수에서 정수 또는 문자의 플레이스 홀더로 기능하며, 이 인수는 소비되어 대신 배치됩니다.두 번째 특별한 캐릭터는#는 형식 인수의 집계로 대체되지만 사용량은 그대로 유지됩니다.둘다요.v그리고.#프리픽스 파라미터 목록에 삽입된 다이내믹콘텐츠에 의해 정의된 enable 동작.

vparameter value는 일반 프로그래밍의 맥락에서 변수에 해당하는 기능을 도입합니다.이 간단한 시나리오에서는 정수 2진수 표현을 왼쪽 패드로 하기 위해5리터럴 솔루션은, 8 자리 이상(제로)까지입니다.

(포맷 T ~8,0b" 5) 

단, 출력폭을 제어하는 첫 번째 프레픽스파라미터는 다음과 같이 정의할 수 있습니다.v문자, 파라미터 값 지정을 다음 형식 인수에 위임합니다.8.

(포맷 T "~v", "0b" 8 5) 

프리픽스 파라미터 리스트의 일부가 다음 코드와 같이 리터럴이 아닌 변수 또는 함수 인수로 기술되어야 하는 경우, 이러한 종류의 솔루션은 특히 유용합니다.

(허락하다 ((수치의 8))   (선언하다 (유형 (정수 0 *) 수치의))   (포맷 T "~v", "0b" 수치의 5)) 

외부 입력과 관련된 상황에서는 함수 인수를 형식 지시어로 전달할 수 있습니다.

(삭제하다 십진법으로 인쇄하다 (번호에서 포맷으로 수치의)   "NUMBER-TO-FORMAT을 16진법으로 인쇄합니다." 적어도 NUMBER-OF-DIGITS에 0이 입력된 왼쪽 패드를 사용합니다."   (선언하다 (유형 번호        번호에서 포맷으로))   (선언하다 (유형 (정수 0 *) 수치의))   (포맷 T "~v, '0x" 수치의 번호에서 포맷으로))  (십진법으로 인쇄하다 12 2) 

#prefix 파라미터로서 이 리스트에서 실제로 아무것도 소비하지 않고 앞의 디렉티브에 의해 아직 처리되지 않은 형식의 인수를 집계합니다.이러한 동적으로 삽입된 값의 사용은 조건부 처리와 관련된 사용 사례로 크게 제한됩니다.인수번호는 0보다 크거나 같은 정수만 사용할 수 있으므로 그 의미는 조건절의 구에 대한 인덱스의 의미와 일치합니다.~[지시.

스페셜의 인터랙션#조건부 선택 디렉티브를 사용한 prefix 파라미터 값~[다음 예시는 을 나타내고 있습니다.조건에는 4개의 구가 기재되어 있으며, 각각 인덱스0, 1, 2, 및 3을 통해 접근할 수 있습니다.형식 인수의 수는 절 인덱스 검색 수단으로 사용됩니다. 이를 위해 우리는 다음을 삽입합니다.#인덱스를 프리픽스파라미터로 할 수 있는 조건부 디렉티브로 합니다. #는 형식 인수 집계를 계산하고 이 숫자를 선택 인덱스로 제시합니다.이 법률에 의해 소비되지 않는 인수는 선택한 절의 지시사항에 의해 이용되고 처리됩니다.

;; "none selected" 를 인쇄합니다. (포맷 T "~#[선택된 항목 없음~;1개 선택: ~a~;2개 선택: ~a 및 ~a~:;더 선택: ~@{~a~^, ~}~]")  ;; "one selected: BUNNY"를 인쇄합니다. (포맷 T "~#[선택된 항목 없음~;1개 선택: ~a~;2개 선택: ~a 및 ~a~:;더 선택: ~@{~a~^, ~}~]" '오디오')  ;; "two selected: BUNNY and PIGON"을 인쇄합니다. (포맷 T "~#[선택된 항목 없음~;1개 선택: ~a~;2개 선택: ~a 및 ~a~:;더 선택: ~@{~a~^, ~}~]" '오디오' '오디오')  ;; "more selected: BUNNY, PIGONE, MOUSE"를 인쇄합니다. (포맷 T "~#[선택된 항목 없음~;1개 선택: ~a~;2개 선택: ~a 및 ~a~:;더 선택: ~@{~a~^, ~}~]" '오디오' '오디오' '오디오') 

수식자

수식어는 명령어의 동작에 영향을 미치려는 플래그의 능력으로 작용합니다.프리픽스 파라미터와 마찬가지로 어드미션, 동작수정 및 효과의 크기는 디렉티브에 따라 달라집니다.경우에 따라서는 디렉티브의 구문이 특정 프레픽스파라미터가 무효가 될 정도로 변경될 수 있습니다.특히 이 파워는 대부분의 파라미터와 수식자를 구별합니다.2개의 유효한 수식어는 다음과 같습니다.@(사인 시) 및:(물리), 아마도 다음 중 하나로 조합될 수 있다.:@또는@:.

다음 예시는 명령어에 가해지는 영향의 다소 가벼운 예를 보여줍니다.@수식자:형식화된 숫자의 이진표현이 항상 숫자의 기호 앞에 오도록 할 뿐입니다.

(포맷 T "~@b" 5) 

서식 지시

완전한 구문 및 수식자 효과를 포함한 형식 지시어의 열거는 [2]다음과 같습니다.

성격 묘사
~ 리터럴 ~ 문자를 인쇄합니다.

전체 양식:~repetitions~.

수식자 없음: 인쇄repetitions의 곱절~성격.

:수식자:무효한.

@수식자:무효한.

:@수식자:무효한.

c, C 단일 문자를 인쇄합니다.

전체 양식:~c.

수식자 없음: 접두사 없이 형식 인수 문자를 인쇄합니다.

:modifier: 인쇄되지 않는 문자를 입력합니다.

@수식자: 가독성을 부가합니다.#\프레픽스

:@modifier: 인쇄되지 않은 문자를 입력하고 시프트 키를 나타냅니다.

% 무조건 새 행을 인쇄합니다.

전체 양식:~repetitions%.

수식자 없음: 인쇄repetitions줄 바꿈

:수식자:무효한.

@수식자:무효한.

:@수식자:무효한.

& 조건부 줄바꿈 또는 줄바꿈을 인쇄합니다.

전체 양식:~repetitions&.

수식자 없음:행선지가 신규 행의 선두가 아닌 경우는, 인쇄합니다.repetitions줄 바꿈; 그렇지 않으면 인쇄repetitions- 줄 바꿈 1개

:수식자:무효한.

@수식자:무효한.

:@수식자:무효한.

페이지 구분 기호를 인쇄합니다.

전체 양식:~repetitions .

수식자 없음: 인쇄repetitions페이지 구분자를 곱합니다.

:수식자:무효한.

@수식자:무효한.

:@수식자:무효한.

r, R 지정한 베이스(기수)로 숫자를 인쇄하거나 철자를 입력합니다.

전체 양식:~radix,minColumns,padChar,commaChar,commaIntervalR.

프리픽스 파라미터를 사용하여 인수를 기수(베이스)로 출력합니다.

프리픽스 파라미터를 지정하지 않으면 format 인수는 영문자 또는 로마 숫자로 표시됩니다.

수식자 없음: 인수를 영문 숫자로 출력합니다.

:modifier: 인수의 철자를 영어 서수 숫자로 입력합니다.

@수식자: 일반적인 로마 형식을 사용하여 로마 숫자로 인수를 인쇄합니다(예: 4 = IV).

:@수정자: 이전 로마 형식을 사용하여 로마 숫자로 인수를 인쇄합니다(예: 4 = III).

d, d 인수를 10진수 기수로 인쇄합니다(기본값 = 10)로 인쇄합니다.

전체 양식:~radix,minColumns,padChar,commaChar,commaIntervald.

수식자 없음: 없는 10진수로 인쇄합니다.+(+) 기호 또는 그룹 구분 기호.

:수식자:쉼표를 그룹 구분 기호로 사용합니다.

@modifier: 부호를 추가합니다.

:@modifier: 부호를 추가하고 그룹 구분자로 쉼표를 사용합니다.

b, B 인수를 이진 기수(기본값 = 2)로 인쇄합니다.

전체 양식:~radix,minColumns,padChar,commaChar,commaIntervalb.

수식자 없음: 없는 이진수로 인쇄합니다.+(+) 기호 또는 그룹 구분 기호.

:수식자:쉼표를 그룹 구분 기호로 사용합니다.

@modifier: 부호를 추가합니다.

:@modifier: 부호를 추가하고 그룹 구분자로 쉼표를 사용합니다.

o, o 인수를 8진수 기수(base = 8)로 출력합니다.

전체 양식:~radix,minColumns,padChar,commaChar,commaIntervalo.

수식자 없음: 없는 8진수로 출력합니다.+(+) 기호 또는 그룹 구분 기호.

:수식자:쉼표를 그룹 구분 기호로 사용합니다.

@modifier: 부호를 추가합니다.

:@modifier: 부호를 추가하고 그룹 구분자로 쉼표를 사용합니다.

x, x 인수를 16진수 기수(기본값 = 16)로 출력합니다.

전체 양식:~radix,minColumns,padChar,commaChar,commaIntervalx.

수식자 없음: 16진수로 출력합니다.+(+) 기호 또는 그룹 구분 기호.

:수식자:쉼표를 그룹 구분 기호로 사용합니다.

@modifier: 부호를 추가합니다.

:@modifier: 부호를 추가하고 그룹 구분자로 쉼표를 사용합니다.

f, F 인수를 고정 소수점 표기로 플로트로 출력합니다.

전체 양식:~width,numDecimalPlaces,scaleFactor,overflowChar,padCharf.

수식자 없음: 없는 고정 소수점 인쇄+(더하기) 기호

:수식자:무효한.

@modifier: 부호를 추가합니다.

:@수식자:무효한.

e, E 인수를 지수 표기법으로 플로트로 출력합니다.

전체 양식:~width,numDecimalPlaces,numDigits,scaleFactor,overflowChar,padChar,exponentChare.

수식자 없음: 수식자 없음으로 지수 출력+(더하기) 기호

:수식자:무효한.

@modifier: 부호를 추가합니다.

:@수식자:무효한.

g, g 인수를 고정 소수점 또는 지수 표기로 플로트로 인쇄하여 자동으로 선택합니다.

전체 양식:~width,numDecimalPlaces,numDigits,scaleFactor,overflowChar,padChar,exponentCharg.

수식자 없음: 고정 소수점 또는 지수로 출력됩니다.+(더하기) 기호

:수식자:무효한.

@modifier: 부호를 추가합니다.

:@수식자:무효한.

$ 통화 규칙에 따라 인수를 인쇄합니다.

전체 양식:~width,numDigits,minWholeDigits,minTotalWidth,padChar$.

수식자 없음: 다음을 포함하지 않고 통화 규약으로 인쇄합니다.+(플러스) 기호 또는 패딩

:modifier: 문자를 채우기 전에 기호를 추가합니다.

@modifier: 부호를 추가합니다.

:@수식자:무효한.

a, A 인간 친화적인 방법으로 인수를 인쇄합니다.

전체 양식:~minColumns,colInc,minPad,padChara.

수식자 없음: 정당성 없이 인간 친화적인 출력을 출력합니다.

:수식자: 인쇄NIL빈 리스트로서()대신NIL.

@수식자: 패드는 오른쪽이 아닌 왼쪽에 있습니다.

:@수식자: 왼쪽 패드와 인쇄NIL~하듯이().

s, s 와 호환되는 방법으로 인수를 인쇄합니다.read기능.

전체 양식:~minColumns,colInc,minPad,padChars.

수식자 없음: 인쇄read-호환성이 있습니다.

:수식자: 인쇄NIL빈 리스트로서()대신NIL.

@수식자: 패드는 오른쪽이 아닌 왼쪽에 있습니다.

:@수식자: 왼쪽 패드와 인쇄NIL~하듯이().

w, w 프린터 제어 변수에 따라 인수를 인쇄합니다.

전체 양식:~w.

수정자 없음: 현재 설정된 제어 변수에 따라 출력합니다.

:수식자: 예쁜 인쇄가 가능합니다.

@수식자:인쇄 수준 및 길이 제한을 무시합니다.

:@수식자:인쇄 레벨과 길이의 제약을 무시하고, 예쁜 인쇄를 실현합니다.

_ 예쁜 프린터 규칙에 따라 줄 바꿈을 인쇄합니다.

전체 양식:~_.

수식자 없음: 한 줄을 초과할 경우 줄 바꿈을 인쇄합니다.

:modifier: 앞에 줄이 없는 경우 줄 바꿈을 출력합니다.

@수식자:콤팩트한(마이너) 스타일을 사용합니다.

:@수식자:항상 줄 바꿈을 삽입합니다.

< > 출력을 정당화합니다.

전체 양식:~minColumns,colInc,minPad,padChar<expression~>.

수정자 없음: 출력을 왼쪽 정렬합니다.

:수식자:왼쪽 패딩을 추가합니다(= 오른쪽 정렬).

@수식자:오른쪽 패딩을 추가합니다(= 왼쪽 정렬).

:@수식자:텍스트를 가운데에 배치합니다.

, 이 논리 블록을 들여씁니다.

전체 양식:~i.

수식자 없음: 첫 번째 문자부터 들여쓰기를 시작합니다.

:수식자:현재 출력 위치에서 시작하는 들여쓰기.

@수식자:무효한.

:@수식자:무효한.

/ 포맷 작업을 사용자 정의 함수로 디스패치합니다.함수는 적어도 4개의 파라미터를 수용해야 한다. (1) 인쇄할 스트림 또는 조정 가능한 문자열 (2) 처리할 형식 인수 (3) 다음과 같은 부울 값T만약:수식자가 제공되었고 (4) 다음과 같은 부울 값T만약@수식자가 제공되었습니다.또한 함수가 프리픽스 파라미터도 허용해야 하는 경우 0 이상의 인수를 지정할 수 있습니다.

전체 양식:~prefixParams/function/.

수식자 없음:기능의 실장에 따라 다릅니다.

:수식자:기능의 실장에 따라 다릅니다.

@수식자:기능의 실장에 따라 다릅니다.

:@수식자:기능의 실장에 따라 다릅니다.

t, t 출력 커서를 지정된 열 또는 수평 거리로 이동합니다.

전체 양식:~columnNumber,columnIncrementt.

수식자 없음: 지정된 열로 이동합니다.

:수식자:오리엔트 섹션.

@modifier: 현재 위치를 기준으로 커서를 이동합니다.

:@수식자:단면에 상대적인 오리엔트.

* 형식 인수를 이동합니다.

전체 양식:~numberOfArgs*.

수식자 없음:를 생략합니다.numberOfArgs형식을 지정합니다.

:수식자: 이동numberOfArgs뒤로.

@수식자: 인덱스의 인수로 이동합니다.numberOfArgs.

:@수식자:무효한.

[ 조건에 따라 식을 인쇄합니다.이러한 식()은 다음과 같이 구분됩니다.~;directive 및 default 구를 지정할 수 있습니다.~:;선두 구분자로 사용됩니다.허용되는 절의 수는 이 지시어의 수식어에 의해 명시된 구체적인 종류에 따라 달라집니다.전체 조건부 부분은 다음과 같이 종료해야 합니다.~].

전체 양식:~[clause1~;...~;clauseN~:;defaultClause~].

선택할 절의 인덱스를 재배치하는 대체 형식이 있습니다. 수식자 없이만 유효합니다.selectionIndexformat 인수에서 prefix 파라미터로 이동합니다.

전체 양식:~selectionIndex[clause1~;...~;clauseN~:;defaultClause~].

이 구문은 특히 특수한 프레픽스파라미터 문자와 조합하여 자동으로 변환됩니다.#이 값은 선택한 요소를 처리할 수 있는 형식 인수 수와 일치시킵니다.이러한 종류의 지시어는 여러 선택 항목을 매우 간결하게 모델링할 수 있습니다.

수식자 없음:format 인수는 0 기반의 정수 인덱스여야 하며 이 값은 선택 및 인쇄할 절의 값이어야 합니다.

:수식자:format 인수가 다음과 같은 경우 첫 번째 구를 선택합니다.NIL, 그 이외의 경우는, 2번째입니다.

@수식자:format 인수가 다음과 같은 경우에만 구를 처리합니다.T그렇지 않으면 건너뜁니다.

:@수식자:무효한.

{ 하나 이상의 형식 인수를 반복하여 출력합니다.반복 부분은 다음과 같이 닫아야 합니다.~}지시.디렉티브가~^는 동봉된 부분 안에 있으며, 그 이후의 내용은 현재 요소가 처리 목록의 마지막 요소가 아닌 경우에만 소비됩니다.prefix 파라미터가numberOfRepetitions이 값을 지정하면 처리하는 요소의 최대 수가 정의됩니다.지정되지 않은 경우 이들 모두가 소비됩니다.

전체 양식:~numberOfRepetitions{expression~}.

수식자 없음:단일 형식 인수는 목록이어야 하며, 해당 요소는 동봉된 지시문에 따라 순서대로 사용됩니다.

:modifier: format 인수가 서브리스트를 소비하는 리스트가 될 것으로 예상합니다.

@modifier: 나머지 모든 형식 인수를 목록으로 간주하여 사용합니다.

:@modifier: 나머지 모든 형식 인수를 하위 목록 목록으로 간주하고 이러한 하위 목록을 사용합니다.

? 디렉티브를 형식 인수로 예상되는 다음 인수로 대체합니다.이 인수는 새로운 부분의 후속 형식 인수를 사용합니다.

전체 양식:~?.

수식자 없음: 후속 형식 인수가 삽입된 제어 문자열과 관련된 요소를 포함하는 목록이어야 합니다.

:수식자:무효한.

@modifier: 통상적인 방법으로 지정하는 것과 같이 삽입된 부분에 대해 이들 인수의 리스트가 아닌 개별 형식 인수를 예상합니다.

:@수식자:무효한.

( 둘러싸인 문자열의 대소문자를 변경합니다.

전체 양식:~(expression~).

수식자 없음:모든 문자를 소문자로 변환합니다.

:수식자: 모든 단어를 대문자로 표시합니다.

@수식자: 첫 번째 단어만 대문자로 쓰고 나머지는 소문자로 변환합니다.

:@수식자:모든 문자를 대문자로 변환합니다.

p, p 숫자 형식 인수에 따라 단수 또는 복수 접미사를 인쇄합니다.

전체 양식:~p.

수식자 없음: 인수가 1이면 아무것도 인쇄하지 않고, 그렇지 않으면 인쇄합니다.s.

:수식자: 마지막으로 사용된 형식 인수로 돌아갑니다. 1이면 아무것도 인쇄하지 않고, 그렇지 않으면 인쇄합니다.s.

@수식자: a를 인쇄합니다.y인수가 1일 경우, 그렇지 않을 경우 출력됩니다.ies.

:@수식자: 마지막으로 사용한 형식 인수로 되돌아가 인쇄y1일 경우, 그렇지 않을 경우 인쇄ies.

^ 반복 지시어로 사용~{...~}형식 인수가 추가되지 않을 경우 동봉된 내용의 처리를 종료합니다.

전체 양식:~p1,p2,p3^.

종료 조건은 지정된 프리픽스파라미터의 수에 따라 달라집니다.

  • prefix 파라미터를 지정하지 않은 경우 처리할 인수가 제로인 경우 디렉티브는 정지됩니다.
  • 1개의 프리픽스파라미터가 있는 경우p1지정되면 디렉티브는 정지됩니다.p10으로 해결됩니다.
  • 2개의 프레픽스파라미터가 있는 경우p1그리고.p2지정되면 디렉티브는 정지됩니다.p1동등.p2.
  • 3개의 프레픽스파라미터가 있는 경우p1,p2그리고.p3지정되면 디렉티브가 정지됩니다.p1p2p3.

수식자 없음:설명대로 동작합니다.

:수식자:무효한.

@수식자:무효한.

:@수식자:무효한.

줄바꿈 여러 줄의 제어 문자열에서 줄 바꿈 및 인접 공백을 건너뛰거나 유지합니다.

전체 양식:~Newline.

수식자 없음:줄 바꿈 직후와 인접한 공백 공간을 건너뜁니다.

:수식자:직후 줄 바꿈을 건너뛰지만 인접한 공백은 유지됩니다.

@modifier: 직후 줄 바꿈을 유지하지만 인접한 공백은 건너뜁니다.

:@수식자:무효한.

C의 예printfcall은 다음과 같습니다.

 인쇄물("색상 %s, 1번 %d, 2번 %05d, 16진수 %x, 부동 %5.2f, 부호 없는 값 %u.\n",              "빨간색", 123456, 89, 255, 3.14, 250); 

Common Lisp를 사용하면 다음과 같습니다.

 (포맷 t "컬러~A, 넘버1~D, 넘버2~5, 0D, 16진수~X, 플로트~5F, 부호없는 값~D.~%"              "빨간색" 123456 89 255 3.14 250)  ;; 인쇄:색상 빨간색, 번호 1 123456, 번호 2 00089, 16진수 FF, 플로트 3.14, 부호 없는 값 250. 

또 다른 예는 쉼표로 구분된 목록의 모든 요소를 인쇄하는 것입니다. 쉼표는 ~{, ~^ 및 ~}개의 [3]지시어를 사용하여 수행할 수 있습니다.

 (허락하다 ((식료품류 '(달걀  버터 당근들)))    (포맷 t "~{~A~^, ~}~%" 식료품류)         ; 대문자로 인쇄    (포맷 t ~:(~{~A~^, ~}~)~%" 식료품류))   ; 출력을 대문자로 변환합니다.  인쇄물: 계란, 빵, 버터, 당근.  인쇄물: 계란, 빵, 버터, 당근. 

값 리스트가 직접 반복될 뿐만 아니라format단, 콤마는 항목 뒤에가 아니라 항목 사이에 올바르게 인쇄됩니다.보다 복잡한 예로는 관습적인 영어 표현을 사용하여 목록을 출력하는 것이 있습니다.

(허락하다 ((템플릿 행운의 승자는 다음과 같습니다.~#[없음~; ~S~; ~S~] ~:~@{~#[~; 및~]~S~^,~}~]"))   (포맷 제로 템플릿)   ;; § "행운의 승자는: 한 명도 없었다."   (포맷 제로 템플릿 '후우')   행운의 승자는 FOO였다.   (포맷 제로 템플릿 '후우' '바)   ①"행운의 승자는 FOO와 BAR"였다.   (포맷 제로 템플릿 '후우' '바 '바즈)   ①"행운의 승자는 FOO, BAR, BAZ"였다.   (포맷 제로 템플릿 '후우' '바 '바즈 '쿵')   ①"행운의 우승자는 FOO, BAR, BAZ, QUUX"입니다.   ) 

새로운 디렉티브를 정의하는 기능~/functionName/에 커스터마이즈 수단을 나타냅니다.다음 예제에서는 입력 문자열을 소문자, 대문자 또는 역자로 인쇄하는 함수를 구현하여 반복 횟수를 설정할 수도 있습니다.

(삭제하다 마이 디렉티브 (목적지                     포맷을 변경                     대장 수식제 공급 p                     at-sign-modifier-provided-p                     옵션 (반복 1))   "이 함수는 명령어로 적합한 콜백을 나타냅니다. "format" 호출, 문자열이 FORMAT-ARGUMENT여야 합니다. 대상까지 반복 횟수를 인쇄합니다. --- COLON-MODIFIER-SUPPLY-P 및 AT-SIGN-MODIFIER-SUPPLY-P 플래그 각각을 대표하여 일반화 부울을 기대한다. ":" 및 "@" 수식자.그 영향이 정의되어 있다. 다음과 같습니다. - 수식자가 설정되지 않은 경우 FORMAT-ARGUMENT가 출력됩니다. 추가 수정. - 콜론 수식자가 설정되어 있지만 at-sign 수식자가 설정되어 있지 않은 경우, FORMAT-ARGUMENT는 인쇄하기 전에 소문자로 변환됩니다. - 콜론 수식어가 아닌 at 수식어가 설정되어 있는 경우, FORMAT-ARGUMENT는 인쇄 전에 대문자로 변환됩니다. - 두 수식자가 모두 설정되어 있는 경우 FORMAT-ARGUMENT가 반전됩니다. 인쇄. --- FORMAT-ARGUMENT 문자열이 인쇄되는 횟수는 다음과 같습니다. 프리픽스 파라미터 REPECTIONS에 의해 결정됩니다.이 파라미터는 음수가 아닌 정수이며 기본값은 1입니다."   (선언하다 (유형 (또는 무효 (eql T) 개울. 스트링) 목적지))   (선언하다 (유형 T                               포맷을 변경))   (선언하다 (유형 T                               대장 수식제 공급 p))   (선언하다 (유형 T                               at-sign-modifier-provided-p))   (선언하다 (유형 (정수 0 *)                   반복))      (허락하다 ((스트링 투 프린트 포맷을 변경))     (선언하다 (유형 스트링 스트링 투 프린트))          ;; 수식자에 따라 STRING-TO-PRINT를 조정합니다.     (견디다       ((그리고. 대장 수식제 공급 p at-sign-modifier-provided-p)         (설정 스트링 투 프린트 (거꾸로 하다 스트링 투 프린트)))       (대장 수식제 공급 p         (설정 스트링 투 프린트 (스트링 다운 케이스 스트링 투 프린트)))       (at-sign-modifier-provided-p         (설정 스트링 투 프린트 (스트링 업 케이스 스트링 투 프린트)))       (T         없음))          (고리 따라하다 반복 하니       (포맷 목적지 "~a" 스트링 투 프린트))))  ;; 「Hello」를 1회 인쇄합니다. (포맷 T "~/mydirection/" "안녕하세요")  ;; 「Hello」를 3회 인쇄합니다. (포맷 T "3 / my direction /" "안녕하세요")  ;; 소문자 "Hello"(= "hello")를 세 번 인쇄합니다. (포맷 T "3:/my direction/" "안녕하세요")  ;; 대문자 "Hello"(= "HELLO")를 세 번 인쇄합니다. (포맷 T "3@ / my direction /" "안녕하세요")  ;; 반대로 "Hello"(= "olle")를 인쇄합니다.H") 3회 (포맷 T "~3:@/mydirection/" "안녕하세요") 

한편format는 불투명해지고 읽기 어려워지는 경향이 있는 것으로 악명이 높으며, 전문적이고 일반적인 [3]요구를 위한 매우 간결하면서도 강력한 구문을 제공합니다.

[ Common Lisp FORMAT ]요약 테이블을 사용할 [4]수 있습니다.

레퍼런스

  1. ^ "CLHS: Function FORMAT". www.lispworks.com.
  2. ^ "CLHS: Section 22.3". www.lispworks.com.
  3. ^ a b 18. 실용적인 일반 리스프에서 제공하는 몇 가지 포맷 레시피
  4. ^ [ Common Lisp FORMAT ]개요표

책들