2009-03-01から1ヶ月間の記事一覧
マクロを書く際によく使用されることになる、バッククォートの使い方。本やサイトで読むだけではよくわからない部分もあるので試してみた。 まず、そもそも「どういう時にマクロを使用するのか」という点。自分流に表現すると、「ソースコード上の冗長化を解…
Windows環境でwith-open-fileマクロを試してみた。確認したかったのは次の点。 Drive Letter はどういう扱いになるのか? 作成されていないディレクトリは勝手に作ってくれるのか?エラーになるのか? 単純に、以下のように実行してみた。 ? (with-open-file…
文字列の連結は、普通は(concatenate 'string "ABC" "DEF")というようにするのかもしれないが、何度も書くと冗長な気がするので、独自のappend-stringを定義。 (defun append-string (original-string append-string) (concatenate 'string original-string …
方法がわかったのでメモ。サンプルとか書いておいてくれればわかりやすいのに・・・ Clozure CL Documentationの一番下に書かれているオプションに格納されるようだ。使い方はこんな感じです。 $ ccl64 -l sample.lisp -- aaa bbb ccc ("aaa" "bbb" "ccc") $…
Lispでlsを実装してみる。もっとも、すべてのオプションを網羅することはできず、単純にファイル名やディレクトリ名の一覧を取得できるだけのものを目指す。とりあえず、実現にはdirectory関数が必須な感じだ。以下のようにしてみた。 (defun ls (pattern) (…
Lispで関数を定義する際のパラメータに付与するキーワードとして、&key、&optionalというのをやってみたが、他にも&restというのがある。 これは、試してみたがどうやら「個数を限定できない」ということを意味するパラメータのようだ。たとえば、 (list 0 1…
ディストリビュージョンごとにLinuxのディレクトリ構造が少しずつ異なっていってしまわないのだろうか・・・と、前から疑問に思っていたけれども、これを統一化する動きがあるようだ。FHS(Filesystem Hierarchy Standard)というのがそれで、/binにはどうい…
先日、&keyというのを試してみたので、今回は&optionalをやってみる。まず、サンプルとする関数は (defun optional-func (a b &optional c d) (list a b c d))としてみる。実行してみると、以下のような感じになる。 ? (optional-func "A") > Error: Too few…
Lispであるものを作りたい、と思っている。そのあるものを作る際に、「リストの最後からXXX個の要素を取り出す」ことをしたいと思って、そういう関数がないか調べてみた。そしたら、そのものズバリな関数が・・・その名はlast。まったく・・・そのままだ。参…
LispでSocket作るときとか、他の様々な関数でもプロトタイプの中に&KEYというのがあることがある。ちょっとこれについての考察、というかメモ。まず、自分でキーワードを使用した関数を定義するには、以下のようにする。 (defun keyword-func (&key a b c) (…
先日、scanf卒業 - Shammerismで例示した実装、 int number,i,j; char str[3]; printf("Type the number:"); fgets(str, sizeof(str),stdin); number = atoi(str); printf("Number:%d\n", number);で、fgetsを連続して行うように修正し、さらに最初のfgetsで…
C言語の入門書ではほぼ間違いなく使われているけれども、実際の開発現場では間違いなく使われていないと予想されるscanf関数の使用を止めることにしました。標準入力から簡単に文字を読み込めるから勉強レベルでは便利なのだけれども・・・どうも、連続でsca…
format構文は非常に奥が深い・・・そう感じるきっかけになった使い方についてメモ。formatでは、引数内部で~aとか~%とか、いくつか特殊な役割を持つ書き方がある。その中の一つに、~{というものがある。これが、Practical Common Lisp で使用されていた。 Pr…
文字列を置換するコマンドとして、replace-stringとreplace-regexpを試してみたが、これを使用すると否応なく一括変換されてしまう。一括で変換せず、置換するかどうかを都度確認しながら置換したいという場合は、別のコマンドを使用する。 M+x query-replac…
プログラムのソースコードを書いていると、自動改行してほしい・・・と思うことがたくさんある。Emacsでもデフォルトでそのパターンが定義されていたりするが、もっと細かく自分仕様にカスタマイズする方法がわかったのでメモしておく。まず、設定に関する変…
文字列置換は、 replace-string replace-regexp というコマンドのようだが、デフォルトではキーバインドは割り当てられていないようだ。だから、Option-x(M-x)のあとでコマンドを入力する感じだ。たとえば、 afbkd000dkle1kd11dkl12dkele22lke33lkej334keke4…
文字列検索や置換に正規表現は必要不可欠。とりあえず、正規表現の要素を調べてみました。なお、表中のXXXは任意の文字列を意味します。 意味 表記方法 改行以外の文字一文字 .(ドット) 0回以上の繰り返し 1回以上の繰り返し + 0回、あるいは1回を意味する ?…
何も考えずにひたすら配列の要素とキーを比較する線形サーチに対して、要素数の多い配列のキーを比較するには二分サーチがよい。 これは、1度検索を行う度に検索対象を半分に縮めていく。 たとえば、配列数が10億としても30回前後検索をすればターゲット情…