記憶に残ったprologのプログラム

なるほどと思ったprologのプログラムをメモがわりに記載しておく。

引用元は以下で、文字コードをEUCにする必要がある。(prologでネットを漁っていると、よくEUCで書かれていて、文字コードのメタ情報が入っていないサイトにぶつかる)
http://bach.istc.kobe-u.ac.jp/prolog/intro/list.html

% 翻訳器
replace([], []).
replace([X|L], [X1|L1]) :- rule(X, X1), replace(L, L1).
% データ
rule(i, '私').
rule(you, 'あなた').
rule(have, '持つ').
rule(love, '愛する').
rule(a, '一つの').
rule(pen, 'ペン').
rule(book, '本').

実行してみる。

?- replace([i,have,a,book], L).
L = ['私','持つ','一つの','本'] ? 

?- replace([i,love,you], L).
L = ['私','愛する','あなた'] ? 

変数Lで、リストを受け取る。最初の言葉に置き換えをして、残りに自分を再帰的に呼び出している。