Shammer's Philosophy

My private adversaria

~%をファイルに書き出すには

普通にformatを使ってファイルに~%を書き出そうとすると、~%でなく改行と認識されてしまい期待通りにならない。

? (with-open-file (file "aaa.l" :direction :output)
    (format file "~%"))
NIL
?

これで書き出されたaaa.lは以下のように改行だけ(何も表示されない)。

$ cat aaa.l 

$

formatで~を書き出すときには、~~と続けることで書き出すことができる。

? (with-open-file (file "aaa.l" :direction :output :if-exists :supersede)
    (format file "~~%~%"))
NIL
?

このaaa.lは以下のようになる。

$ cat aaa.l 
~%
$ 

formatを使用する関数が定義されたファイルは以下のように書き出しできる。

? (with-open-file (file "aaa.l" :direction :output :if-exists :supersede)
    (format file "(defun hello ()")
    (terpri file)
    (format file "  (format t \"Hello!~~%\"))"))
NIL
?

この書き出したファイルをloadして実行することもできる。

? (load "aaa.l")
#P"/XXX/aaa.l"
? (hello)
Hello!
NIL
?