* Menu
[[About:self:AboutPage.txt]] | [[Profile:file/southly/]] | [[まとめ:self:1163859357.txt]] | [[オリジナル:http://ninjinix.x0.com/rn/]] | [[xyzzy:lisp/]] | [[あんてな:listall]] | [[■:lisp]] | [[buzz:files/southly#buzz]]
- xyzzy lisp : format ~%
- xyzzy lisp : format ~C
- xyzzy lisp : format ~P
- 素数を求める
- 素数を求める
- 素数を求める
- xyzzy lisp : format ~X
- xyzzy lisp : format ~D
- xyzzy lisp : format ~O
- xyzzy lisp : format ~B
- xyzzy lisp : formatのCONTROL-STRINGとパラメータと「:」と「@」の関係
- xyzzy lisp : format
- 2006-05-23 「A・E・H・R・T」でできるすべての文字列を表示するプログラム
- xyzzy lisp : junk/httpの利用例として
- xyzzy lisp : ディレクトリ付きにしてユニークなバッファ名に
* xyzzy lisp : format ~%
- 改行の出力
- パラメータは最大1つ
- 出力する個数。非負の整数。
(format nil "~%") " " (format nil "~3%") " " (format nil "~0%") ""
* xyzzy lisp : format ~C
- 文字の表示
- ":C" 文字名(と言えばいいのかな?)を出力
- "@C" 文字型の表記で出力
- ":@C" ":C"といっしょみたい
- パラメータは無し
(format nil "~C" #\C-a) "^A" (format nil "~:C" #\C-a) "C-a" (format nil "~@C" #\C-a) "#\\C-a"
* xyzzy lisp : format ~P
- 複数形の表示
- ":P" 一つ前と同じ引数を使う
- "@P" 'y'の変化
- ":@P" 上記の組み合わせ
- パラメータは無し
(format nil "cat~P" 1) "cat" (format nil "cat~P" 2) "cats" (format nil "~R cat~:P" 1) "one cat" (format nil "~R cat~:P" 2) "two cats" (format nil "cand~@P" 1) "candy" (format nil "cand~@P" 2) "candies"
* 素数を求める
素直じゃない再帰・マクロ(ほぼ)無し
(defun generate-primes (limit) (format t "~{ ~D~}~%" (funcall (lambda (f c n &optional (x 3) (prime (list 2))) (funcall f f c n x prime)) (lambda (f c n x prime) (if (> x n) (nreverse prime) (if (funcall c c x prime) (funcall f f c n (+ x 2) (cons x prime)) (funcall f f c n (+ x 2) prime)))) (lambda (c x prime) (if (endp prime) t (if (zerop (rem x (car prime))) nil (funcall c c x (cdr prime))))) limit)))
* 素数を求める
素直に再帰
(defun generate-primes (limit) (labels ((check (x prime) (cond ((endp prime) t) ((zerop (rem x (car prime))) nil) (t (check x (cdr prime))))) (main (n x prime) (cond ((> x n) (nreverse prime)) ((check x prime) (main n (+ x 2) (cons x prime))) (t (main n (+ x 2) prime))))) (format t "~{ ~D~}~%" (main limit 3 (list 2)))))
* 素数を求める
素直にループ
(defun generate-primes (limit) (let ((prime nil)) (push 2 prime) (do ((x 3 (+ x 2))) ((> x limit)) (if (dolist (i prime t) (if (zerop (rem x i)) (return nil))) (push x prime))) (format t "~{ ~A~}~%" (nreverse prime))))
* xyzzy lisp : format ~X
- 整数データの16進表記
- ":X" カンマ区切り
- "@X" 常に符号付き
- ":@X" 上記の組み合わせ
- パラメータは最大4つ
- 最小桁(幅)
- 足りない空きを埋める文字
- 区切りに使う文字
- 区切りを入れる間隔
- 後ろ2つは":X"と":@X"のときのみ有効。"X"と"@X"では無視される。
(format nil "~X" #x123abc) "123abc" (format nil "~:X" #x123abc) "123,abc" (format nil "~@X" #x123abc) "+123abc" (format nil "~:@X" #x123abc) "+123,abc" (format nil "~10X" #x123abc) " 123abc" (format nil "~10,'*X" #x123abc) "****123abc" (format nil "~10,'*:@X" #x123abc) "**+123,abc" (format nil "~10,'*,'-,2:X" #x123abc) "**12-3a-bc"
* xyzzy lisp : format ~D
- 整数データの10進表記
- ":D" カンマ区切り
- "@D" 常に符号付き
- ":@D" 上記の組み合わせ
- パラメータは最大4つ
- 最小桁(幅)
- 足りない空きを埋める文字
- 区切りに使う文字(いわゆる全角文字は想定されていない。最小桁がおかしくなる)
- 区切りを入れる間隔
- 後ろ2つは":D"と":@D"のときのみ有効。"D"と"@D"では無視される。
(format nil "~D" 12345) "12345" (format nil "~:D" 12345) "12,345" (format nil "~@D" 12345) "+12345" (format nil "~:@D" 12345) "+12,345" (format nil "~10D" 12345) " 12345" (format nil "~10,'*D" 12345) "*****12345" (format nil "~10,'*:@D" 12345) "***+12,345" (format nil "~10,'*,'-,2:D" 12345) "***1-23-45"
* xyzzy lisp : format ~O
- 整数データの8進表記
- ":O" カンマ区切り
- "@O" 常に符号付き
- ":@O" 上記の組み合わせ
- パラメータは最大4つ
- 最小桁(幅)
- 足りない空きを埋める文字
- 区切りに使う文字
- 区切りを入れる間隔
- 後ろ2つは":O"と":@O"のときのみ有効。"O"と"@O"では無視される。
(format nil "~O" #o12345) "12345" (format nil "~:O" #o12345) "12,345" (format nil "~@O" #o12345) "+12345" (format nil "~:@O" #o12345) "+12,345" (format nil "~10O" #o12345) " 12345" (format nil "~10,'*O" #o12345) "*****12345" (format nil "~10,'*:@O" #o12345) "***+12,345" (format nil "~10,'*,'-,2:O" #o12345) "***1-23-45"
* xyzzy lisp : format ~B
- 整数データの2進表記
- ":B" カンマ区切り
- "@B" 常に符号付き
- ":@B" 上記の組み合わせ
- パラメータは最大4つ
- 最小桁(幅)
- 足りない空きを埋める文字
- 区切りに使う文字
- 区切りを入れる間隔
- 後ろ2つは":B"と":@B"のときのみ有効。"B"と"@B"では無視される。
(format nil "~B" #b11010) "11010" (format nil "~:B" #b11010) "11,010" (format nil "~@B" #b11010) "+11010" (format nil "~:@B" #b11010) "+11,010" (format nil "~10B" #b11010) " 11010" (format nil "~10,'*B" #b11010) "*****11010" (format nil "~10,'*:@B" #b11010) "***+11,010" (format nil "~10,'*,'-,2:B" #b11010) "***1-10-10"
* xyzzy lisp : formatのCONTROL-STRINGとパラメータと「:」と「@」の関係
~a 4 : @ ~s 4 : @ ~d 4 : - ~b 4 : - ~o 4 : - ~x 4 : - ~r 5 : @ :@ ~p 0 : @ ~c 0 : @ ~f 5 - @ ~e 7 - @ ~g 7 - @ ~$ 4 : @ :@ ~% 1 - - ~& 1 - - ~| 1 - - ~~ 1 - - ~\n 0 : @ - ~t 2 - @ - ~* 1 : @ - ~w ??? ~? 0 - @ - ~( 0 : @ :@ ~[ 1→ :0 @0 - ~{ 1 : @ :@ ~^ 3 : -
* xyzzy lisp : format
* 2006-05-23 「A・E・H・R・T」でできるすべての文字列を表示するプログラム
http://d.hatena.ne.jp/tamago_girai/20060522#p1
pushが失敗だった。訂正版。
より簡潔に。再帰が一回分増えるのがアレだったんだけど、きれいな解答ならこちらかな。
pushが失敗だった。訂正版。
より簡潔に。再帰が一回分増えるのがアレだったんだけど、きれいな解答ならこちらかな。
(defun a-e-h-r-t (rest &optional pool) (if (not rest) (format t "~{~A~}~%" (reverse pool)) (dolist (x rest) (a-e-h-r-t (remove x rest) (cons x pool))))) (a-e-h-r-t '(a e h r t))