%% 知識情報処理実習 r6の練習問題 解答例 % 1. ocr_a(a). ocr_a(f(T)) :- ocr_a(T). test6_1_1 :- ocr_a(f(f(f(a)))). test6_1_2 :- ocr_a(f(f(f(b)))). /* 文法の定義をプログラムとして記述するのは誤り. 文法はあくまでもデータに対する規則であり, プログラムはそれに基づいて定義されたデータを解析するものでコンパイラと同じ. */ % 2. subst(a,c). subst(f(T1),f(T2)) :- subst(T1,T2). subst(T,T). test6_2_1(X) :- subst(f(f(a)),X). test6_2_2(X) :- subst(f(f(b)),X). % 3. n_functors(a,0). n_functors(b,0). n_functors(f(T),N) :- n_functors(T,N1), N is N1+1. test6_3(X) :- n_functors(f(f(f(a))),X). % 4. subst2(a,c). subst2(f(T1),f(T2)) :- subst2(T1,T2). subst2(g(X1,Y1),g(X2,Y2)) :- subst2(X1,X2), subst2(Y1,Y2). subst2(T1,T1). test6_4(X) :- subst2(f(g(1,f(a))),X).