yuu_nkjm blog


2012-11-12(Mon) [長年日記]

[Scheme][Ruby] Schemeのお勉強 (S式と評価,式と文,リテラル)

SchemeのS式(アトム,シンボル,リスト)を評価をする際の振る舞いが簡潔にまとまっていたページがあったのでメモ.特に重要と思うところを赤くした.

S 式 ─┬─ アトム ─┬─ 整数値
   │      │
   │      ├─ 文字列
   │      │
   │      └─ シンボル
   │
   └─ リスト
 図 : Scheme の基本的なデータ型
いままで使ってきたデータの種類には、リスト (list)、整数値 (integer)、文字列 (string)、シンボル (symbol) があります。データの種類を「型 (type) 」といいます。このほかにも、「ベクタ (vector) 」や「文字 (character) 」など重要なデータ型 (data type) がいくつかあります。 すべてのデータをまとめて「S 式 (symbolic expression) 」または「フォーム (form) 」と呼びます。S 式は「アトム (atom) 」と「リスト (list) 」に分けられます。アトムとは、リスト以外のデータすべてのことを意味します。したがって、整数値や文字列やシンボルはアトムになります。 Scheme (Lisp) は、S 式の値を計算することで動作します。値を計算することを「評価 (evaluation) 」するといいます。評価規則はデータ型によって決められています。
1. リスト リストの先頭要素を評価し、その値が関数であればそれを実行して結果を返す。たとえばシンボルの場合、その値 (関数) を取り出して実行し、その結果を返す。ほかの要素は引数として関数に渡される。 2. シンボル そのシンボルに格納されている値を返す。 3. その他 自分自身を返す。
たとえば、(+ 1 2 3) を実行する場合、関数 + を実行する前に、引数の 1, 2, 3 を「評価」します。この場合、引数がリストやシンボルでないので、そのまま関数に渡されるのです。評価しても自分自身になるデータ型を「自己評価フォーム」といいます。通常の関数では、引数は必ず評価されることを覚えておいて下さい。 ただし、シンタックス形式の場合は引数を評価しないことがあります。define は引数を評価しませんでしたね。通常の関数は引数を評価するが、シンタックス形式は関数によって違うことに注意して下さい。

式と文,リテラル,評価あたりはよく考えると分からなくなってくることがある.以下のページが参考になる.


トップ «前の日記(2012-11-08(Thu)) 最新 次の日記(2012-11-15(Thu))» 月表示 編集 設定
2006|01|06|12|
2007|06|09|
2008|01|03|04|06|07|08|09|10|12|
2009|01|02|05|06|07|08|10|11|12|
2010|03|04|05|06|07|08|09|10|11|
2011|01|02|03|04|05|06|07|08|09|11|12|
2012|01|02|04|06|07|08|10|11|12|
2013|01|02|03|07|08|10|11|12|
2014|01|02|04|05|06|07|08|09|10|11|
2015|01|02|07|11|12|
2016|01|03|05|07|08|09|