« プログラミングを始めるには(34) | Main | プログラミングを始めるには(36) »

September 19, 2014

プログラミングを始めるには(35)

かなり說明の順番が狂ったかもしれないが、Lispのデータについて書いてみようと思う。

だいぶ前に書いたと思うが、初心者向けのプログラマ硏修では、データのことを器だと思えと敎えられる。器には形があるので、それにあったものを入れることが出來る。合わないものを入れることは出來ない...これはプログラムで扱うデータのことを言い表す上で一見もっともらしい說明だが、明らかに靜的型付けのプログラミング言語を前提としているのではないか。そういうプログラミング言語では、整數型のデータに文字列を設定すると暴走することがあるが、たいていコンパイルの段階でエラーやワーニングを出してくれるので氣付く。

プログラム設計の段階では特定のプログラミング言語に依存しない記述を理想としているらしいので、そこに記載されているデータが何型をしているのか不明である。したがって、プログラム設計が終わってもそこで扱うデータの形が分からないという不思議な狀態になっている。プログラムが入力データを處理して出力データを作り出すものだとすると、データの形も決めないで設計書を書いていることになり、プログラマはそんな設計書を渡されても、「こんな處理で大丈夫なの?」という疑問を解消できないまま、疑心暗鬼でプログラムを作る羽目になる。そんなプログラムを結合してシステムテストをしても動くはずがない。

データがどういう形をしていれば良いかは設計が決めるべきところだが、データ型はプログラミング言語に依存するものであり、プログラム設計書ではデータの内容や論理構造を定義するにとどまることが多い。また、靜的型付け言語は、あるデータがどういう形をしているかをデータに尋ねる機能がないので、設計者やプログラマが管理する必要がある。そういう意味で、たとえばCのようなプログラミング言語は眞に面倒臭い。これはC++でもJavaでも大差はない。

Lispの場合は、あるデータが器としてどのような形をしているかをあまり氣にする必要が無い。しいて言えばすべてLispオブジェクト型である、ということになる。プログラム上のデータとしては、Lispオブジェクトをシンボルにバインドして扱う。したがってLispではシンボルがデータであるかのように記述することが多い。

(defvar test-value 123)
test-value

test-value
123

(set 'test-value "123")
"123"

test-value
"123"

(setq test-value '(1 2 3))
(1 2 3)

test-value
(1 2 3)

これはC言語における、ポインタと實體の關係に似ていると思われるかもしれないが、C言語のポインタとLispのシンボルは全く違うものと考えた方が良い。

|

« プログラミングを始めるには(34) | Main | プログラミングを始めるには(36) »

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

Listed below are links to weblogs that reference プログラミングを始めるには(35):

« プログラミングを始めるには(34) | Main | プログラミングを始めるには(36) »