このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1248012902/584
#  【 課題 】 http://ime.nu/rg550.hp.infoseek.co.jp/cgi-bin/joyful/main.htm の857です 
#  【 形態 】1. Javaアプリケーション(main()で開始)  
#  【 GUI  】指定なし  
#  【 期限 】12/11  
#  【 Ver  】1.6.0_16  
#   
#  よろしくお願いします 
# 
# 
# 以下の2文を同一と認識できるようなプログラムを作成せよ
# ?が先頭の単語は変数とする
#
# ・?x is ?y and ?x name(?x)
# ・Rose is rose and ?y name(Rose)
# 

'2文を同一と認識'(_文1,_文2) :-
  'SPLIT'(_文1,[' ','(',')'],L1),delete_space(L1,L11),
  'SPLIT'(_文2,[' ','(',')'],L2),delete_space(L2,L22),
   変数置換(L11,L22,X,Y),
   X = Y.

delete_space(L1,L2) :- findall(A,(member(A,L1),\+(A=' ')),L2).

変数置換(L1,L2,VL1,VL2) :-
  length(L1,Len),length(VL1,Len),length(VL2,Len),
  append(L1,L2,L3),
  変数置換の二(X,L3,L4),
  append(VL1,VL2,L4).

変数置換の二(_,[],[]) :- !.
変数置換の二(X,[A1|R1],[X|R2]) :-
  \+(var(A1)),atom(A1),
  sub_atom(A1,0,2,_,'?x'),
  変数置換の二(X,R1,R2),!.
変数置換の二(X,[A1|R1],[_|R2]) :-
  \+(var(A1)),atom(A1),
  sub_atom(A1,0,2,_,'?y'),
  変数置換の二(X,R1,R2),!.
変数置換の二(X,[A|R1],[A|R2]) :-
  変数置換の二(X,R1,R2),!.