今回は著者がelispで書いたLispインタープリタsLispを元にLispの世界を紹介していきます。ラムダ計算、Yコンビネータやschemeで有名な継続をsLispの実装を元に解説します。sLispのソース全文を記載したgithubへのリンクを書いておくので興味のある方は実際に動かしてみてください。22.2.1上のみで動作検証をしています。簡単にラムダ計算について説明します。ラムダ計算を知るにはまずラムダ記法を知る必要があります。ラムダ記法は"関数"の記述を簡便に扱うための記法です。ような関数fが与えられた時、それをラムダ記法で書くと以下のようになります。この式中の\を「ラムダ」と読みます。ドット(.)より右側の式は関数本体を表します。ラムダは変数xが関数本体で束縛されている事を表しています。変数はa,b,xのどれが「束縛変数」であるかを明示できる事があげられます。このラムダ式の場合、xが束縛変数でa,bは束縛されていない変数です。関数呼び出し時に実引数で値が決まる変数(プログラミングの用語を使うと仮引数)が束縛変数です。定義2.1.1によりあげておきます。形式を関数抽象と呼び、MNの形式をMのNに対する関数適用と呼びます。次に以下のようなラムダ式を考えます。M)のラムダ式Nに対する適用です。このラムダ式を、ラムダ式Mに含まれている変数xを全てラムダ式Nで置き換える事をベータ変換と呼び、以下のように記述します。Mの式中のxを全てNで置き換えられた式を意味します。ラムダ計算(及びそれを基礎にしている関数型言語)の世界では実引数には値の他に関数自体を渡す事が出来ます。ようなイメージになります。この記法を用いてベータ変換を以下のように再帰的に定義します。)を以下のように定義しておきます。