2008年1月13日日曜日

Chapter 18 A Few FORMAT Recipes

あせらず、じっくりやりたいのですが、ちょっとじれてきてもいます。一日一章で一ヶ月。やっぱり長いです。ちょっと加速してみようと思います。加速しても理解の深さは今までと同レベルをキープします。もしかしたら、ペースを崩して墓穴を掘るかもしれません。。。


前説


  • LOOP利用例をFORMAT利用例で焼き直しても。。。嫌われものどうしで比較してどうする。
  • 試す。

    CL-USER> (defun hoge (list)
    (loop for cons on list
    do (format t "~a" (car cons))
    when (cdr cons) do (format t ", ")))
    HOGE
    CL-USER> (hoge '(1 2 3 4))
    1, 2, 3, 4
    NIL
    CL-USER> (defun piyo (list)
    (format t "~{~a~^,~}" list))
    PIYO
    CL-USER> (piyo '(1 2 3 4))
    1,2,3,4
    NIL
    CL-USER> (defun puyo (list)
    (do ((rest list (cdr rest)))
    ((null rest) t)
    (if (cdr rest)
    (format t "~a, " (car rest))
    (format t "~a" (car rest)))))
    PUYO
    CL-USER> (puyo '(1 2 3 4))
    1, 2, 3, 4
    T
    CL-USER>


まあ、出力したいだけなんだから、それをFORMATにまとめちゃうというのは私的にはありです。LOOPは、まだ気持ち悪いのですが。


The FORMAT Function

特になし。


FORMAT Directives

この本、語り部口調が売りだと思うのですが、この際箇条書きで書いてもらった方がわかりやすいと思うところもあるんだよね。。。

メモをとりながら。

  • 全てのdirectivesは次の形となる。
    ~(prefix parameters)(a character)

    • (a character)がdirectivesの本体というか名前。
    • (prefix parameters)は無いこともある。
    • (prefix parameters)は複数のパラメータの場合もある。その場合は、それらをカンマで区切る。
    • (prefix parameters)のパラメータは、具体的な数でもよいし、外から渡してもよいし、#のようにdirectiveの形から算出されるものもあるし、:や@のように出力形式を指定するものもある。
    • :と@の場合は、:@とすると両方の出力形式が採用される。形式としてバッティングする場合は、新しい出力形式が定義されている場合もあるし、何が出力されるかわからん場合もある。



Basic Formatting
Character and Integer Directives
English-Language Directives
Conditional Formatting

特になし。


Iteration

  • おお、~^は脱出なんだ。
  • "~{~#[~;~a~;~a and ~a~:;~@{~a~#[~;, and ~:;, ~]~}~]~}"。ウォーー


Hop, Skip, Jump
And More ...

特になし。

0 件のコメント: