%%   知識情報処理実習 r7の練習問題 解答例

% 1.
alphabet(a).
alphabet(b).

isTm1(T) :- alphabet(T).
isTm1(f(T)) :- isTm1(T).

test7_1_1 :- isTm1(f(a)).
test7_1_2 :- isTm1(f(f(b))).
test7_1_3 :- isTm1(c).

/* 文法の定義をプログラムとして記述するのは誤り.
文法はあくまでもデータに対する規則であり,
プログラムはそれに基づいて定義されたデータを解析するものでコンパイラと同じ.
*/

% 2.
alphabet(a). 
alphabet(b).

digit(0).
digit(1).

isTm2(T) :- alphabet(T).
isTm2(T) :- digit(T).
isTm2(f(T)) :- isTm2(T).
isTm2(g(T1,T2)) :- isTm2(T1), isTm2(T2).

test7_2_1 :- isTm2(f(a)).
test7_2_2 :- isTm2(g(0,f(b))).
test7_2_3 :- isTm2(g(a)).
test7_2_4 :- isTm2(f(g(a,a))).