2008-01-01から1年間の記事一覧
ヒューマンスキル向上について考えている。 ヒューマンスキルと言ってもそれは幅広いが、その中で特に重要と思ったのが整理力だ。 よくわからない技術的な問題を調べていると、どうしても混乱が生じる。 様々なケースを確認している最中に条件変更の漏れがあ…
C や Java で言うところの、switch 文のようなものが Lisp にもある。 以下のように記述する。 (defun janken (x) (cond ( (= 0 x) 'GOO) ( (= 1 x) 'CHOKI) ( (= 2 x) 'PAA) ( t '???) ))
ユーザーの入力は、 (read) で受け取れる。これを、setq などの関数と組み合わせて使う。 > (defun ask-question (question) (format t "~A?" question) (read)) ASK-QUESTION > (setq x (ask-question "How old are you")) How old are you?100 100 > x 100…
LispのHelloWorldはこうなる。 (format t "HelloWorld.") 出力は、 HelloWorld NIL となる。・・・LispではHelloWorldなどいらないと思うが、NIL が返ってくるのか・・・ よくわからないが、きっとそういうものなんだろう。 主に、文字の出力は、入力待ちの…
Lisp では、条件分岐は次のように書く。 (if (条件) (条件が真の場合の処理) (条件が偽の場合の処理)) 例を書くと・・・ (if (listp x) (+ 10 10) (+ 1 1)) となる。この実行前に、 (setq x '(1 2 3)) というように、x がリストとして定義されていれば20が、…
もう今は昔、、、と言える話になっただろうか。 一昔前は、コンピュータ技術者はいわゆるオタクで、人付き合いが苦手でコンピュータと 接している方が得意、という感じだった。 が、業務システムを構築する仕事が一般的になるにつれて そういう感じの技術者…
JavaやCと大きく違うのはやっぱりその式の書き方だと思った。 int x = ax + y というようにJavaやCでは書くのに対して、Lispでは (* a x) というように、先に演算子がくる。上記の式を書くとすると、 (+ (* a x) y) という感じだ。 (set 'a 2) 2 (set 'x 67)…
ClozureCLは、 /Applications/ClozureCL にインストールされた。このディレクトリの下にscriptというディレクトリがあるので、そこにTerminalで移動。 cd /Applications/ClozureCL/script そこにある、ccl あるいは ccl64 を、PATH設定されている任意のディ…
Emacs で設定をいろいろしているが、その設定の意味が全然わからない。 これをわかるようになるためにちょっとずつLispをやっているが・・・ とりあえず、初歩の初歩。何かしらの変数を定義する。 Lispの文法としては、 (setq x 1) 1 x 1 という感じ。実行は…
Cでは変数を宣言するとどのように初期化されるのだろうか。 main() { int integer1,integer2,sum; printf("The value of integer1 : %d\n", integer1); printf("The value of integer2 : %d\n", integer2); printf("The value of sum : %d\n", sum); printf(…
久々にLispをいじってみた。これまでは、Emacs 上で動かしていたが、本格的(?)なLispの処理系を入れてみた。 大半が、ソースコードからコンパイルする形でインストールしないといけないようだったが、Clozure Common Lisp のみは dmg のインストーラがあ…
サンプルのファイル名を変えた場合に、古いファイルがそのまま残ってしまう。 自分で rm コマンドを使って消せばいいのだが、せっかくスクリプトを用意したのだから その中でやらせることに。 ファイルの有無を判定するための方法、いろいろあるが test コマ…
やっぱりコンパイルされてできあがるファイルの名前を"連番.bin"でなく、 "ファイル名.bin"にしたい、という気持ちからそれをするためのシェルを引き続き作成。 すでに配列の中にファイル名.cという名前が格納済みだからそれを利用する。 一番後ろの.cのみ取…
この@ITのサイト、 http://www.atmarkit.co.jp/flinux/rensai/shell05/parameter.html にいくつか方法が出ている。 直接的にやりたいことは出ていなかった。 どうにかしてこのパターンまで自分で考える必要がある。 一番簡単なのは ls *.c の結果をコマンド…
作成したシェルスクリプトが原始的すぎて更新が面倒・・・ ということで、やっぱり少し改良を試みる。 基本的に、cc でコンパイルすると -o オプションをつけない限りは すべて同じ名前のバイナリファイルにコンパイルされてしまう。 そのため、ソースごとに…
最初に Make を使おう!って考えたのは・・・Emacs のミニウィンドウから使えるためだ。 やっぱり、あれこれアプリを起動して、つまりEmacs以外にターミナルとか起動して作業するのは ちょっと面倒。。。そういうのを全部やってくれるのがIDEなのだがIDEは重…
サンプルとはいえ、プログラムをたくさん書いているとそれなりに数が増えてくる。 最初は、Makeファイルを作って M-x compile と実行していたが、なんか Make ファイルの書き換えが面倒になってきた。 そもそも、 ・自分がほとんど Make を知らない ・Make …
Tiger より後のバージョンではわからないが、それ以前は Java でサンプルを作ると System.out.println("hogehoge"); というようなコードを使って文字をコンソールに表示させていた。 System クラスの static 変数 out がコンソールとひもづけられていて、そ…
これもやっぱりJavaと違う箇所。Javaでは、 for( int i = 0 ; i array[i] = i; } というように、for()の () 内で宣言した変数をそのブロック内で使用できたが Cではこれができないようだ。そのため、この宣言を外だしにする必要がある。 int loop; for( loop…
Javaをやっていた自分からみて以外だった事実の一つがCにはboolean型がない、ということ。 0だとfalseとして扱われ、それ以外はtrueとして扱われるようだ。 while(true){ ... とJavaで書くような処理は、while(1){ ... という感じで書くようだ。 なんか変な…
開発環境として Emacs を使っていると、どうしてもあれこれ設定したくなる。 そこで、必要になるのがLispだ。Emacsを使う以上、どうしてもこれをある程度は 知っていないといけない。関数型プログラミングということでCやJavaとだいぶ毛色は 違うけれどもち…
仕事がきつくなると、体力的にも時間的にも個人的な勉強時間を割くことが難しくなってくる。 個人的に勉強したい内容と仕事ですぐに必要な内容が一致している場合は これはかなり幸せなことだ。しかし、そうであるケースは非常に少ない。 今個人的に一番勉強…
Cの場合は実行時に動的に決まる情報というのは決められるのだろうか。 これを考えるとJava の動的クラスロードって便利と改めて考えさせられる。 それがこのリンカについて考えたときの自分の結論。 Cの場合は、コンパイル時にリンカを呼び出して、 実際の処…
プリプロセッサ・・・Javaにこういうのはあっただろうか。 コンパイル時の動きから考えると、Javaでいうところのインライン化とか、 ジェネリクスやcloneメソッドみたいな暗黙的なメソッド挿入とかが該当しそう。 Cでのプリプロセッサは、基本的に#で始まる…
Javaの場合、自分の書いたソースコードは javac mysource.java としてやればJavaVMが解釈可能な中間コードができる。 これを java mysource という感じにして実行する。 こうするとJava仮想マシン上で mysource が実行される。だが、C言語の場合はこれよりい…
ちょっと海外に行っていたので久々の更新。 開発の現場を離れたから、今のSIがどうなっているのかわからない。 でもちょっと気になるニュースを見た。 IT業界に激震走る! http://itpro.nikkeibp.co.jp/article/COLUMN/20080606/306796/ これまで当たり前だ…
JavaのソースファイルをEclipseで開いて・・・ということは多いかも(あまりIDEは使いたくないが)。 それを考えると、最初からEmacsの文字コードもEclipseに合わせてUTF-8にしてしまいたい。 日本語版のEclipseだとEUC-JPとかShift_JISとか選べるのかもしれ…
適当なJavaファイルをEmacsで作成し、それをEclipseで開くと日本語が文字化けする。 いろいろ確認したところ、Emacsのデフォルト文字コードがEUCっぽいのに対し、 EclipseはUTF-8になっているためのようだ。 これまでも、コメントは日本語で書くことが多く、…
昨日に続き、Socket API のサンプルの続き。自分が送ったメッセージをそのままサーバーから受け取り、 それを表示するクライアントのサンプル。ほとんど、http://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=4-274-06520-0と 同じであることは昨日のサーバー側…
単純に、クライアントから受け取ったメッセージをそのままクライアントに返すだけのサンプルを作成。 と言っても、http://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=4-274-06520-0の内容をほとんど真似たもの。 ソースコードも上記サイトより入手できるようだ…