このディレクトリの索引

http://pc12.2ch.net/test/read.cgi/tech/1268003943/6
# 同じく1977年11月号 "マイクロコンピュータそのII プログラミングの基礎(まとめ)" から 
# <<本として出版されていたら御免なさい。>> 
# 数あてゲーム 
# 1) 出題者は適当な4桁の数字(a)を決める。 
# 2) 解答者は出題者の決めた数字を予想して出題者に数字(b)を示す。 
# 3) 出題者は解答者の提示した数字を見て、次のヒントを出題者に知らせる。 
#  a,bの両方に含まれる数字の数(c) 
#  aとbの対応する桁の数字が一致した数(d) 
# 4) 解答者は出題者が示したヒントからbを訂正して 2) に戻る。 
# 
# ゲームは正解を得るまでに何回のヒントを得たかによって判定されるので 
# ヒントを得る回数が最少になるように努力するプログラムを作りなさい。 

出題者が適当に決めた4桁の数字(_出題者が適当に決めた4桁の数字ならび) :-
      N  is random mod 10000,
      number_chars(N,L1),
      頭部零補正(L1,_出題者が適当に決めた4桁の数字ならび).

解答者から4桁の数字を得る(_解答者の提示した4桁の数字ならび) :-
      催促付き整数入力('4桁の数字を入力してください : ',N),
      N >= 0,N =< 9999,
      number_chars(N,L1),
      頭部零補正(L1,_解答者の提示した4桁の数字ならび).

出題者は解答者の提示した数字を見て、次のヒントを出題者に知らせる(_出題者が適当に決めた4桁の数字ならび,_解答者の提示した4桁の数字ならび) :-
      '両方に含まれる数字の数'(_出題者が適当に決めた4桁の数字ならび,_解答者の提示した4桁の数字ならび,_両方に含まれる数字の数),
      '対応する桁の数字が一致した数'(_出題者が適当に決めた4桁の数字ならび,_解答者の提示した4桁の数字ならび,対応する桁の数字が一致した数),
      write_formatted('ヒント: 両方に含まれる数字の数は%tです\n',[_両方に含まれる数字の数]),
      write_formatted('ヒント: 対応する桁の数字が一致した数%tです\n',[_対応する桁の数字が一致した数]),!.

両方に含まれる数字の数(L1,L2,_両方に含まれる数字の数) :-
      積集合(L1,L2,L3),
      length(L3,_両方に含まれる数字の数).

対応する桁の数字が一致した数([],_,0) :-
対応する桁の数字が一致した数(_,[],0) :-
対応する桁の数字が一致した数([A|R1],[A|R2],X) :-
      対応する桁の数字が一致した数(R1,R2,Y),
      X is Y + 1,!.
対応する桁の数字が一致した数([_|R1],[_|R2],X) :-
      対応する桁の数字が一致した数(R1,R2,X).