2008-11-01から1ヶ月間の記事一覧
配列の要素を取得するには、aref関数を使う。 > (setq array-1 #2A(("AAA" "BB")("C" "DDDD"))) #2A(("AAA" "BB") ("C" "DDDD")) > (aref array-1 0 0) "AAA"この、aref の戻り値を置き換えるような形で配列要素の置換ができる。 > (setf (aref array-1 0 0)…
プリプロセッサの命令に define というのがある。 #define VALUE 100これを使用すると、コンパイラはコンパイル前にソースコード内の「VALUE」という値を 100 に置き換えてからコンパイルする。 Javaでいうfinalによるインライン化と同じようなことをしてく…
文字列が、文字の配列だとすると・・・文字列の配列はどうなるのか? 最初に、文字列に対してarray-total-sizeとかを使ってみる。 >(array-total-size "This is a pen.") 14 >(array-rank "This is a pen.") 1 >(array-dimension "This is a pen." 0) 14なる…
本当は使いたくなくても、仕事をしていると使わざるを得ないものってある。 自分にとっては、JavaのIDEってそれ。なんかほとんど使いこなせないくらい多くの機能があってそれで非常に重たい。 シンプルでいいから軽くしてくれ・・・って思ってしまう。 Antや…
Lispで文字列を定義するのは簡単だ。ダブルクォートで、文字を囲んでやればいい。 >"AAA" "AAA" >(setf string-1 "AAA") "AAA" >string-1 "AAA"また、文字列は個々の文字列の配列(ベクタ)でもある。文字列を表現するには、#\aとか、#\bとかやるようだ。他…
再帰と反復と、両方とも繰り返し処理を扱うものだが、その使い分けとかをどうするか考えてみた。 とりあえず、それぞれの特徴をまとめると、[再帰処理] 関数呼び出しを繰り返す 基底ケースに達したときに処理が終了する [反復処理] 反復構造を明示的に利用し…
JavaとCではどうも変数のスコープが異なるようだ。 ネストされたブロック内でもCだと同じ変数が使えるらしい。 たとえば、 main() { int x = 100; { int x = 1000; printf("%d\n", x); } printf("%d\n", x); return 0; } Java だとこのようなことはできない…
make-array関数で配列を作ることができる、というのは[Lisp] - Shammerismですでに試してみた。一歩進んで、作成された配列の要素数を調べてみる。length関数を使用すればできるかと思ったが、多次元配列だとうまくいかなかった。 > (setq array1 (make-arra…
C言語で乱数を生成する場合にどうするか? その際に使うのが rand 関数と srand 関数だ。 これを組み合わせて乱数を生成する。 まず、 rand 関数を実行して、その結果を出力してみる。 main() { int i = 0; for( i = 0 ; i int x = 1 + rand() % 9; printf("…
consは、与えられた引数を連結してリストを作る、と思っていたが、どうも少し違うようだ。 > (cons 'a 'b) (A . B) > (list 'a 'b) (A B) > (car (list 'a 'b)) A > (car (cons 'a 'b)) A > (cdr (list 'a 'b)) (B) > (cdr (cons 'a 'b)) B(A.B)というドット…
Lispには、奇数・偶数判定を行える関数がある。 oddp 引数が奇数の場合にT evenp 引数が偶数の場合にT 構文は、それぞれ以下のようになる。 (oddp N) (evenp N) 実際に使ってみる。 ?(oddp 1) T ?(oddp 2) NIL ?(oddp 3) T ?(evenp 1) NIL ?(evenp 2) T ?(ev…
length の他にも、SEQUENCEを扱う関数をメモ。 every reverse some sort subseq それぞれ、以下のような構文になる。 (every PREDICATE ONE-SEQ &REST SEQUENCES) (reverse SEQUENCE) (some PREDICATE ONE-SEQ &REST SEQUENCES) (sort SEQUENCE PREDICATE &K…
値呼び出しと参照呼び出し。これはJavaでも散々やった。 どのプログラム言語にもあるのかな・・・ Cでもポインタをやる前にこれを抑えておく必要がある。まず、値呼び出しとは、別の関数にパラメータを渡したときにそのパラメータがコピーされるということ。…
SEQUENCEの一部(あるいはすべて)をコピーするのがsubseq関数。 (SUBSEQ SEQUENCE START &OPTIONAL END)&OPTIONAL とは、省略可能な引数ということか。 この関数の実行例は以下のような感じ。 ?(setf lst '(a b c d e f g)) (A B C D E F G) ?(subseq lst 3…
発表会で着る衣装をクリーニングに出していて、今日はそれを取りに行ってきた。 間に合わなかったらどうしようとか思っていたけれどどうにか間に合った。 先生から襟を立てるように言われていたが、クリーニング終わって戻ってきたシャツは襟が折れていて、…