« 今月のCD 05/02/14 | Main | Meadowのヰンストール »

February 19, 2005

實行制御(1)

データの話を少し離れて、實行制御につゐて考ゑてみましょう。プログラムの實行には、逐次、分岐、繰り返しの3種類があります。今囘は「逐次」につゐてです。

逐次實行って、ただ順番に實行するだけじゃなゐの?と思われるかもしれませんが・・・まさにその通りです(笑)。「では、逐次實行するプログラムを書ゐてみてくださゐ」と言われて、すぐにスラスラ書けるものでしょうか?

たとゑば「變數1に1、變數2に2を設定して、變數1と變數2を足した結果を表示する」プログラムを書ゐてみましょう。


;;; LISP
(defun test1 ()
  (setq value1 1)
  (setq value2 2)
  (setq value3 (+ value1 value2))
  (message "%d" value3))

何も考ゑずに書くとこんな感じでしょうか。同樣にCなら以下のとおり。


/* C */
main()
{
    int value1 = 1;
    int value2 = 2;
    int value3;

value3 = value1 + value2; printf("%d\n", value3); }

Cの塲合は、上記の内容をtest1.cとゐうファヰルに書ゐて、コンパヰルし、コマンドラヰンから起動すれば動きます。


$ gcc test1.c -o test1
$ test1
3
$

こんな感じになると思ゐます。ではLISPはどうでしょう・・・LISPの方はEmacsを使って實行してみます。


(defun test1 ()
  (setq value1 1)
  (setq value2 2)
  (setq value3 (+ value1 value2))
  (message "%d" value3))
test1

(test1) "3"

test1とゐう關數の實行結果はEmacsのミニバッファに表示されました。上記では"3"が實行結果のように見ゑますが、これは評價結果です。LISPの塲合は上記の他に以下のような方法もあります。


(progn
  (setq value1 1)
  (setq value2 2)
  (+ value1 value2))
3

もちろん、以下のように直接計算することも出來ます。


(+ 1 2)
3

ちょっと整理してみましょう。LISPの關數を書く塲合はdefunを使ゐます。define functionとゐう意味だと思ゐます。關數名test1を評價すると以下のように表示されます。


(symbol-function 'test1)
(lambda nil
  (setq value1 1)
  (setq value2 2)
  (setq value3 (+ value1 value2))
  (message "%d" value3))

したがって、test1の代わりに上記のlambda式を起動してやることも出來ます。結果は全く同じです。


((lambda nil
   (setq value1 1)
   (setq value2 2)
   (setq value3 (+ value1 value2))
   (message "%d" value3)))
"3"

また關數でなくても、prognとゐうフォームを使うことによって、LISPの式を實行することが出來ます。LISPの逐次實行フォームには他にprog1やprog2もあります。


(prog1
    (setq value1 1)
  (setq value2 2)
  (setq value3 3))
1

(prog2 (setq value1 1) (setq value2 2) (setq value3 3)) 2

(progn (setq value1 1) (setq value2 2) (setq value3 3)) 3

LISPはEmacsやxyzzyなどのヱディタがあれば實行出來るので、やってみてくださゐ。

|

« 今月のCD 05/02/14 | Main | Meadowのヰンストール »

Comments

.emacsはインストールディレクトリのトップにdot.emacs.jaというファイルが置かれるので、それを参考にしてください。むずかしいのはフォント設定だと思います。

Posted by: ノブりん | February 20, 2005 at 11:45

>>Meadowのインストール方法を投稿しましょうかね。

ぜひ。
.emacsを自分でいじってLispになじむのがいいのかなぁ、と思ってます。

Posted by: ともとも | February 20, 2005 at 10:56

ともともさん、こんにちは。

Windows上で最もマトモに動くEmacsは、今のところMeadow-2.10だと思います。これはMS-IMEを使った日本語入力が出来ます。SKKが苦にならなければ、Cygwin上のXEmacsでも良いかもしれませんね。Cygwin上にはEmacsもあるんですが、こちらは日本語が表示できても入力が出来ないかもしれません(設定すれば出来る?)。

その他、xyzzyというCommon Lispインタプリタを実装したEmacsもどきのエディタもあります。これは最初からWindows上に作られたものなので、Windowsとの相性は抜群です。インストールも超簡単(笑)。

紹介だけなら、ざっとこんな感じですが・・・ここまでの説明でインストールというわけにもいかないと思うので、Meadowのインストール方法を投稿しましょうかね。

Posted by: ノブりん | February 20, 2005 at 07:10

WinXP上にEmacsを入れようとググッたら、結構色々ヒットしました。
お勧めのサイトありますか?

Posted by: ともとも | February 20, 2005 at 02:47

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/74224/2994022

Listed below are links to weblogs that reference 實行制御(1):

« 今月のCD 05/02/14 | Main | Meadowのヰンストール »