lispには、lisp固有の言葉使いがあるので、これからlispを学ぶ上で、これらの言葉を予め覚えておく(6)と良いでしょう。
以下の説明では、所々、解り易さを優先するために、正確さに欠ける表現が含まれている。詳しくは、各自、書籍やWeb等を当って欲しい。
なお、この講義で、演習をする分には、以下の内容をとりあえず、信じておいて構わない。
lispでは、文字の種類によって、固有の意味があります。実は色々とあるのですが、まず、区別して欲しいのは、次の3種類です。
空白(7)、タブコード([Tab]キーで入力する)、改行コード([Enter]キーで入力する)は、原則として、一つ以上、いくつ並んでも、一つの空白と同じ意味になります。
ただし、対応する括弧が全て閉じている状態での改行コードの入力( [Enter]キーを押す)は、(すでに、経験している通り.. ) Lispへの指示(8)と解釈されます。
英数字(10)は、次に述べるatomを作る材料になります。
一般に英数字の並び(途中に空白を含めずに、英数字を並べたもの)がatomになります。
なお、演算記号( "+", "-", "/", "*", "%"等)は、原則として、英字と同じようにして扱われます。
特に、数字(と、必要に応じて、負の符号を表す"-",小数点を表す"." [ピリオド]、あるいは、分数を表す"/"を一つだけ含めても良い)を空白を入れずに並べたものは、「数(数値atom)」として扱われます。
atom (アトム)(11)は、上記で述べたように、基本は、「空白を含まない、英数字の並び(ただし、数値の場合は、小数点を表す"."や、分数を表す"/"が一つ含まれても良い)」と考えます。実際には、これ以外のパターンもありますが、しばらくは、atomとはこのようなものと思ってください。
atomは、更に、利用のされ方によって、次の2種類に分けられます。
英字から始まり、英数字または、演算記号からなる文字列で、空白や括弧、シングルークオートを含まない文字列のことを言います。
これは、一般に、「名前」として利用されます。
atom :これ以上、分割できないもの..日本語の別の訳語として「原子」がある。
Lispでは、これ以上分割できない「単位」となるものの総称がatomであり、これから組み立てられるものが全てListになるわけである。
余談だが、物理の世界の原子は、実はまだ分解可能で、それらが素粒子という更に細かいものから成ることが分かったが、Lispの世界でも、実は、atomが分解できて...という話は、この資料の範囲を超えるので省略。興味のある人は、Webや専門書を当たろう。
list (リスト)は、lispの中心となる表現です。listは、次のように「再帰的に定義」されます。
ここで、「再起的」と呼んだのは、この( list )定義の中に、listが利用されているからです。これでは循環論法に見えるのですが、実際には、問題ありません(12)。
以下に、listの例をいくつか、挙げておきます。
括弧の数がどんどん減って行き、最後に要素に含まれる括弧の数が0 (つまりatom )になるので、問題ないわけです。
ペアノによる自然数の定義( 0は自然数、nが自然数ならn + 1も自然数)をほうふつさせると思います。lispでは、0に相当する要素がatomでそれ以外はlistなわけですね。
S-式というのは、lispで扱われるようなデータ全部のことです。
単純に言えば、atomとlistの総称と考えてよいでしょう。