エレファント・ビジュアライザー調査記録

ビジュアルプログラミングで数式の変形を表すことを考えていくブロクです。

関数プログラミング(2)

PLP の項  t \pi(x, e, a) という形のとき

 \displaystyle p(\pi(x, e, a), v) :- unify(x, e), p(a, v).

という PLP の節があって、この節で変換されるものとします。

同様に PLP の項  t \alpha(\lambda(x, a), e) という形のとき

 \displaystyle p(\alpha(\lambda(x, a), e), v) :- unify(x, e), p(a, v).

という PLP の節があって、この節で変換されるものとします。

 

PLP の項  t \rho(f, e, a) という形のとき

 \displaystyle p(\rho(f, e, a), v) :- unify(f, e), p(a, v).

としたいのですが  e f が現れても良いので  unify(f, e) が定義できません。 e に現れる  f を1回ずつ変換していくための PLP の節を定義していきます。

 

 e に現れる  f を1回だけ変換したものを  e' とおくとき

 \displaystyle unify^*(f, e, e, e').

となるような  unify^* を考えます。 t f、定数  c、変数  u、関数の項  g(y_1, y_2, \cdots, y_n) のときそれぞれ

 \displaystyle unify^*(f, e, f, e).

 \displaystyle unify^*(f, e, c, c).

 \displaystyle unify^*(f, e, u, u).

 \displaystyle unify^*(f, e, g(y_1, y_2, \cdots, y_n), g(z_1, z_2, \cdots, z_n)) :-

 \displaystyle unify^*(f, e, y_1, z_1), unify^*(f, e, y_2, z_2), \cdots , unify^*(f, e, y_n, z_n).

のように定義します。

 

一般の場合(「それ以外の場合」を定義したいのですが PLP では「それ以外の場合」を定義することができないのでこうします)

 \displaystyle p(t, v) :- unify(t, v).

という PLP の節があって、この節で変換されるものとします。