Shammer's Philosophy

My private adversaria

2009-03-01から1ヶ月間の記事一覧

LISP:バッククォート記法

マクロを書く際によく使用されることになる、バッククォートの使い方。本やサイトで読むだけではよくわからない部分もあるので試してみた。 まず、そもそも「どういう時にマクロを使用するのか」という点。自分流に表現すると、「ソースコード上の冗長化を解…

Windows環境でFileIOを試す

Windows環境でwith-open-fileマクロを試してみた。確認したかったのは次の点。 Drive Letter はどういう扱いになるのか? 作成されていないディレクトリは勝手に作ってくれるのか?エラーになるのか? 単純に、以下のように実行してみた。 ? (with-open-file…

&restを使ってappend-string

文字列の連結は、普通は(concatenate 'string "ABC" "DEF")というようにするのかもしれないが、何度も書くと冗長な気がするので、独自のappend-stringを定義。 (defun append-string (original-string append-string) (concatenate 'string original-string …

Lisp(ClozureCL)でコマンド引数を受け取るには

方法がわかったのでメモ。サンプルとか書いておいてくれればわかりやすいのに・・・ Clozure CL Documentationの一番下に書かれているオプションに格納されるようだ。使い方はこんな感じです。 $ ccl64 -l sample.lisp -- aaa bbb ccc ("aaa" "bbb" "ccc") $…

lispでlsを実装その1(directory関数)

Lispでlsを実装してみる。もっとも、すべてのオプションを網羅することはできず、単純にファイル名やディレクトリ名の一覧を取得できるだけのものを目指す。とりあえず、実現にはdirectory関数が必須な感じだ。以下のようにしてみた。 (defun ls (pattern) (…

&rest の考察と関数パラメータのまとめ

Lispで関数を定義する際のパラメータに付与するキーワードとして、&key、&optionalというのをやってみたが、他にも&restというのがある。 これは、試してみたがどうやら「個数を限定できない」ということを意味するパラメータのようだ。たとえば、 (list 0 1…

Linux標準ディレクトリ構造

ディストリビュージョンごとにLinuxのディレクトリ構造が少しずつ異なっていってしまわないのだろうか・・・と、前から疑問に思っていたけれども、これを統一化する動きがあるようだ。FHS(Filesystem Hierarchy Standard)というのがそれで、/binにはどうい…

&optionalの考察

先日、&keyというのを試してみたので、今回は&optionalをやってみる。まず、サンプルとする関数は (defun optional-func (a b &optional c d) (list a b c d))としてみる。実行してみると、以下のような感じになる。 ? (optional-func "A") > Error: Too few…

Lispのlast関数

Lispであるものを作りたい、と思っている。そのあるものを作る際に、「リストの最後からXXX個の要素を取り出す」ことをしたいと思って、そういう関数がないか調べてみた。そしたら、そのものズバリな関数が・・・その名はlast。まったく・・・そのままだ。参…

&key の考察

LispでSocket作るときとか、他の様々な関数でもプロトタイプの中に&KEYというのがあることがある。ちょっとこれについての考察、というかメモ。まず、自分でキーワードを使用した関数を定義するには、以下のようにする。 (defun keyword-func (&key a b c) (…

入力バッファクリア方法

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で…

scanf卒業

C

C言語の入門書ではほぼ間違いなく使われているけれども、実際の開発現場では間違いなく使われていないと予想されるscanf関数の使用を止めることにしました。標準入力から簡単に文字を読み込めるから勉強レベルでは便利なのだけれども・・・どうも、連続でsca…

formatで~{を使う

format構文は非常に奥が深い・・・そう感じるきっかけになった使い方についてメモ。formatでは、引数内部で~aとか~%とか、いくつか特殊な役割を持つ書き方がある。その中の一つに、~{というものがある。これが、Practical Common Lisp で使用されていた。 Pr…

文字列対話置換

文字列を置換するコマンドとして、replace-stringとreplace-regexpを試してみたが、これを使用すると否応なく一括変換されてしまう。一括で変換せず、置換するかどうかを都度確認しながら置換したいという場合は、別のコマンドを使用する。 M+x query-replac…

Emacs自動改行設定

プログラムのソースコードを書いていると、自動改行してほしい・・・と思うことがたくさんある。Emacsでもデフォルトでそのパターンが定義されていたりするが、もっと細かく自分仕様にカスタマイズする方法がわかったのでメモしておく。まず、設定に関する変…

Emacsで正規表現を使って文字列置換

文字列置換は、 replace-string replace-regexp というコマンドのようだが、デフォルトではキーバインドは割り当てられていないようだ。だから、Option-x(M-x)のあとでコマンドを入力する感じだ。たとえば、 afbkd000dkle1kd11dkl12dkele22lke33lkej334keke4…

Emacsで正規表現を使って文字列検索

文字列検索や置換に正規表現は必要不可欠。とりあえず、正規表現の要素を調べてみました。なお、表中のXXXは任意の文字列を意味します。 意味 表記方法 改行以外の文字一文字 .(ドット) 0回以上の繰り返し 1回以上の繰り返し + 0回、あるいは1回を意味する ?…

Cで二分サーチ

C

何も考えずにひたすら配列の要素とキーを比較する線形サーチに対して、要素数の多い配列のキーを比較するには二分サーチがよい。 これは、1度検索を行う度に検索対象を半分に縮めていく。 たとえば、配列数が10億としても30回前後検索をすればターゲット情…