formatメモ

あなごるのFF PP ZZでなんとかkozimaさんに追いつきたいなーと思いながらこの辺を見てた時に気になった機能などをメモ。

capitalize

説明はこの辺
LLGolf Hole2の解説でPythonのtitleメソッドと一緒に紹介されてたのを思い出してPythonのリファレンスを漁ってみたら、titleの他にcapitalizeというメソッドがあってどう違うんだ? と思って調べてみると

>>> "asdf QWER".title()
'Asdf Qwer'
>>> "asdf QWER".capitalize()
'Asdf qwer'

titleはEmacsのcapitalize-regionのイメージ。capitalizeメソッド(Rubyにもあった)は先頭の1文字だけを大文字にするらしい。
CLのformatの指定子は~:(が前者で~@(が後者。また、単機能の関数としてstring-capitalizeがあった。

(format nil "~:(asdf QWER~)")
;=> "Asdf Qwer"
(format nil "~@(asdf QWER~)")
;=> "Asdf qwer"
(string-capitalize "asdf QWER")
;=> "Asdf Qwer"

# (number of remaining arguments)

Formatted Outputのトップページに説明のある機能なんだけど扱いが小さすぎてここの最後の例文を見るまで存在に気づかなかった。
前置パラメータで使える記号で、引数の残りの数を埋めこむ。

(format t "~@{~&~#@A~}" 5 4 3 2 1)

    5
   4
  3
 2
1

頑張ればループカウンタっぽく使えるかなーと思って頑張ってみた結果、LLGolf Hole8が変数を使わずにformatとmake-listだけで書けた。format…恐しい子!

(format t"~:@{~@{~&~#@*~:*~#@{■~}~#@*~}~1@*~@{~&~#@{■~}~*~}~}"(make-list(read)))
5

■
■■
■■■
■■■■
■■■■■
■■■■
■■■
■■
■

普通に書いたコードより長いんで縮められれば縮めたい所だけど、既に前半が訳分からないので終了。

ついでに一番アレなアレ

アホじゃなくてルー大柴になるナベアツ。

(dotimes(i 41)(format(< 0 i)"~:[~A~:;~R~]~%"(or(=(mod i 3)0)(find #\3(format()"~A"i)))i))

~Rはxyzzyでも使えたんだけど活用してる人はどれくらいいるんだろう。