Next: , Previous: , Up: Lisp Lists   [Contents][Index]


1.1.1 Lisp Atoms

これまでわたしたちが単語と呼んでいたものは、Lispではアトム(atom)と呼ばれるものです。この用語は歴史的に“分割できない”ことを意味する単語であるatom(原子)が由来です。Lispに関するかぎり、わたしたちがリストで使ってきた単語という要素は、それ以上小さい部分に分割できず、数や‘+’のような単一文字シンボルと同様にプログラムの一部と同じであることを意味しています。その一方でリストは古来の原子のようなアトムとは異なり部分へと分割することができます(car cdr & cons Fundamental Functionsを参照)。

リストの内側ではアトムはそれぞれ空白によって他のアトムと区切られます。アトムはカッコに隣接させることができます。

技術的に言うとLispのリストは空白で区切られたアトムをカッコで括ったもの、別のリストをカッコで括ったもの、あるいはアトムとリストの両方をカッコで括ることによって構成されます。アトムを1つしかもたないリストや、何ももっていないリストも可能です。何ももっていないリストは()のようなリストで、これは空リスト(empty list)と呼ばれています。他のリストとは異なり、空リストはアトムであると同時にリストであるともみなされます。

アトムとリストのプリント表現(printed representation)はどちらもシンボリック式(symbolic expressions)、あるいは簡潔にS式(s-expressions)と呼ばれます。という単語自体によってプリント表現、あるいはコンピューター内部に保持されているアトムやリストのいずれかを参照することができます。という用語が無差別に使用されることもよくあります(多くのテキストでは式にたいする同義語としてフォーム(form)という単語も使用される)。

ちなみにわたしたちの世界を構成する原子にアトムのような名前がつけられたのは、アトムが分割不可能だと考えられていたからです。しかし命名されて以降に、物理的なアトムは分割不可能ではないことが判りました。アトムから一部を分離したり、ほぼ同サイズの2つに分裂することができるのです。物理的なアトムは、本来の性質が発見される前に早まって名前がつけられてしまったのです。Lispでは配列のように特定の種類のアトムは部分へと分割できますが、分割を行うメカニズムはリストにたいするそれとは異なります。リストの処理にかぎっては、リストのアトムは分割できません。

英語における場合と同じようにLispのアトムの構成要素となる文字は、その単語を形成する文字とは意味が異なります。たとえば南アメリカのナマケモノを表す‘ai’ (訳注: ノドジロミユビナマケモノ)は、‘a’や‘i’という単語とはまったく違う単語です。

自然界には多くの種類のアトムが存在しますが、Lispのアトムはたとえば37、511、1729のような数値(number)、‘+’、‘foo’、‘forward-line’のようなシンボル(symbol)のように少ししかありません。上記の例でリストした単語はすべてシンボルです。プログラマーがLispについて通常語る際には、どの類いのアトムを扱うかを普通はもっと具体的に示そうと試みるので、“アトム”という単語を頻繁に使用することはありません。Lispプログラミングのほとんどはリスト内のシンボル(数値のときもあり)に関するものです(訳注: 日本語訳の"(数値のときもあり)"は原文では"(and sometimes numbers)"です)。 (ちなみにカッコつきで記した(and sometimes numbers)というコメントは、非Lisp区切りをもたない空白で区切られたシンボルがカッコで括られたLispの適正なリストです。)

ダブルクォーテーションマーク(二重引用符)の間のテキストは、たとえそれがセンテンス(文節)やパラグラフ(段落)であってもアトムです。以下に例を示します:

'(this list includes "text between quotation marks.")

Lispでは区切り文字や空白文字を含むクォートされたすべてテキストは単一のアトムです。この種のアトムは文字列(string)と呼ばれます(“文字の列”という意味)。文字列は人間が読むためにコンピューターがプリントするメッセージといった類いに使用されます。文字列は数値やシンボルとは異なる種類のアトムであり、使われ方も異なります。

This page has generated for branch:work/add_lispintr, commit:65845cf60c073f2f3182d1d07483530e9bbe1d96 to check Japanese translation.