S式
コンピュータプログラミングにおいて、S式(S-expression)はネストしたリスト(木構造)のデータである。
S式は、プログラミング言語Lispのために考案され、普及した。Lispでは、データだけでなく、ソースコードにもS式を使用する。
Lispの括弧書き文法では、古典的なS式では次のように定義される。
アトム
xとyがS式である(x . y)という形式の式
この定義は、Lispがリストを一連の「セル」として表現していることを反映したもので、それぞれが順序付けられたペアになっている。一般的なリストでは、yは次のセル(もしあれば)を指し、リストを形成する。定義の再帰は、この表現とS式記法の両方が、任意の二分木を表現できることを意味する。
最近のほとんどのsexpr記法では、より一般的な引用文字列(例えば、句読点や完全なUnicodeを含む)を許容しており、おおまかには次のように定義される。
アトムや、データオブジェクトのリテラルはS式である
空リストを表すnil(Common Lisp)または()もS式である(Schemeでは空リストはnilで表さない)
xとyがS式のとき(x .
Common Lispでの例:
S式は、関数READを使ってLispで読むことができる。READは、S式のテキストを読み込んでLispデータを返す。関数PRINTは、S式を出力するために使用できる。出力されたデータオブジェクトがすべて読み取り可能な表現になっていれば、その出力を関数READで読むことができる。Lispは、数値、文字列、シンボル、リスト、その他多くのデータ型を読みやすい形で表現する。プログラムコードは、関数PPRINT(注:Pが2つ、pretty-printの略)を使って、きれいに印刷されたS式としてフォーマットすることができる。
Lispプログラムは有効なS式だが、すべてのS式が有効なLispプログラムになるわけではない。(1.0 + 3.1)は有効なS式だが、有効なLispプログラムではない。これは、Lispが前置記法を使用しており、浮動小数点数(ここでは1.0)は演算(式の最初の要素)として有効ではないからである。