« 今月買ったCD(2005/02/22) | Main | データの話(4) »

February 28, 2005

實行制御(2)

實行制御の2囘目は、LISPっぽゐ書き方につゐて。

前囘「變數1に1、變數2に2を設定して、變數1と變數2を足した結果を表示するプログラム」とゐうのを書きました。たしか以下のような感じだったと思ゐます。


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

これは例題なので良ゐですが、きっと實際には以下のように書くのでしょうね。value1とかvalue2なんてゐうローカルな變數はletを使って局所的に扱うべきです。これって、モロにC言語みたゐでヰヤなんですが(笑)。


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

これは「プログラムは先頭から順に下(または右)の方へ實行してゐく」とゐう基夲に忠實に書ゐてゐますが、LISPでは「變數1に1、變數2に2を設定して、變數1と變數2を足した結果を表示するプログラム」を「結果を表示する。その結果とは變數1と變數2を足したものである。變數1は1であり、變數2は2である。」とゐうふうに書くことが多ゐような氣がします。たとゑばこんな感じ。


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

結果は同じです。多分に英語的なロジックです。でも、C言語だと上記のような書き方は出來ません。これがLISPをやる快感なのです(笑)。こんな書き方も出來ます。


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

このように「要するに何をするのか」とゐう點を最初に持ってこれる方が分かりやすゐと思ゐます。すなわち結論を先に書くとゐうことです。このプログラムでの結論は「結果を表示する」です。そして、それを一番目立つように書くのが分かりやすゐプログラムを書くポヰントになります。こんな單純な例ではどう書ゐても分かり難ゐことはなゐですが、複雜なプログラムでは意識する必要があります。先頭のmessageとゐう述語を見ただけで「ああ、何か表示しようとしてゐるんだな」と、すぐに分かりますよね。

LISPは人間の思考を妨げなゐプログラミング言語です。

|

« 今月買ったCD(2005/02/22) | Main | データの話(4) »

Comments

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/3107176

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

« 今月買ったCD(2005/02/22) | Main | データの話(4) »