このディレクトリの索引

http://pc12.2ch.net/test/read.cgi/tech/1222224721/610 
# 
#  鶴と亀の頭の数の合計と足の数の合計を入力して, 鶴が何羽,亀が何匹いるか 
#  を表示する。(ヒント:頭の数と足の数を変数として,鶴の数と亀の数について 
#  連立方程式を作り,解を与える式の値を表示させればよい) 
# 
%%%%%%%%%%%%%%%%%%% 第一案 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

鶴と亀の頭の数の合計と足の数の合計を入力して, 鶴が何羽,亀が何匹いるか :- 
        催促付き整数入力('鶴と亀の頭の数合計 : ',_鶴と亀の頭の数の合計), 
        催促付き整数入力('鶴と亀の足の数の合計 : ',_鶴と亀の足の数の合計), 
        findall(N,for(0,N,_鶴と亀の頭の数の合計),L), 
        重複順列(L,2,[A,B]), 
        _鶴と亀の頭の数の合計 is A + B, 
        _鶴と亀の足の数の合計 is 2 * A + 4 * B, 
        writef('鶴が%t羽、亀が%t匹。\n',[A,B]).

%%%%%%%%%%%%%%%%%%% 第二案 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

鶴と亀の頭の数の合計と足の数の合計を入力して, 鶴が何羽,亀が何匹いるか :- 
        催促付き整数入力('鶴と亀の頭の数合計 : ',_鶴と亀の頭の数の合計), 
        催促付き整数入力('鶴と亀の足の数の合計 : ',_鶴と亀の足の数の合計), 
        既約ガウス行列に変形([[1,1,_鶴と亀の頭の数の合計],[2,4,_鶴と亀の足の数の合計]],[[_,_,_鶴何羽],[_,_,_亀何匹]]),
        write_formatted('鶴が%t羽、亀が%t匹\n',[_鶴何羽,_亀何匹]).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

鶴亀算(_鶴と亀の頭の数の合計,_鶴と亀の足の数の合計,_鶴が何羽,_亀が何匹) :-
        既約ガウス行列に変形([[1,1,_鶴と亀の頭の数の合計],[2,4,_鶴と亀の足の数の合計]],[[_,_,_鶴が何羽],[_,_,_亀が何匹]]),!.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  本来の鶴亀算  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

一羽の鶴の足の数(2).
一匹の亀の足の数(4).

鶴亀算(_鶴と亀の頭の数の合計,_鶴と亀の足の数の合計,_鶴が何羽,_亀が何匹) :-
        仮に全部鶴だったらどうなるか考えよう(_鶴と亀の頭の数の合計,_仮の鶴と亀の足の数の合計),
        実際の鶴と亀の足の数の合計は仮の鶴と亀の足の数の合計より多いことを確認しよう(_仮の鶴と亀の足の数の合計,_鶴と亀の足の数の合計),
        実際の鶴と亀の足の数の合計との差は(_仮の鶴と亀の足の数の合計,_鶴と亀の足の数の合計,_実際の鶴と亀の足の合計との差),
        この差が生じたのは亀が鶴に混じるとその分足の数も多くなるからであり,
        亀の数の分だけ一匹の亀の足が一羽の鶴よりも多い分だけの差が生じている考えられる,
        ということは,
        亀の数は(_実際の鶴と亀の足の合計との差,_亀が何匹),
        鶴の数は頭の合計から亀の数を引けばよい(_鶴と亀の頭の数の合計,_亀が何匹,_鶴が何羽).

仮に全部鶴だったらどうなるか考えよう(_鶴と亀の頭の数の合計,_仮に全部鶴だとした場合の足の数の合計) :-
        一羽の鶴の足の数(_一羽の鶴の足の数),
        _仮に全部鶴だとした場合の足の数の合計 is _一羽の鶴の足の数 * _鶴と亀の頭の数の合計.

実際の鶴と亀の足の数の合計は仮の鶴と亀の足の数の合計より多いことを確認しよう(_仮の鶴と亀の足の数の合計,_鶴と亀の足の数の合計) :-
        _鶴と亀の足の数の合計 > _仮の鶴と亀の足の数の合計.

実際の鶴と亀の足の数の合計との差は(_仮に全部鶴だとした場合の足の数の合計,_鶴と亀の足の数の合計,_実際の鶴と亀の足の合計との差) :-
        _実際の鶴と亀の足の合計との差 is _鶴と亀の足の数の合計 - _仮に全部鶴だとした場合の足の数の合計.

亀の数は(_実際の鶴と亀の足の合計との差,_亀が何匹) :-
        一羽の鶴の足の数(_一羽の鶴の足の数),
        一匹の亀の足の数(_一匹の亀の足の数),
        _亀が何匹 is _実際の鶴と亀の足の合計との差 // (_一匹の亀の足の数 - _一羽の鶴の足の数).

鶴の数は頭の合計から亀の数を引けばよい(_鶴と亀の頭の数の合計,_亀が何匹,_鶴が何羽) :-
        _鶴が何羽 is _鶴と亀の頭の数の合計 - _亀が何匹.


この差が生じたのは亀が鶴に混じるとその分足の数も多くなるからであり.

亀の数の分だけ一匹の亀の足が一羽の鶴よりも多い分だけの差が生じている考えられる.

ということは.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% 鶴亀算でどうしても課題として残ることは、最初に鶴に着目して考え始めるか
% そうではなくて亀なのか。ここら辺りの曖昧さ、恣意性をどう表現するかだろう。
%

/*

最初に、鶴か亀に着眼する(鶴) :- 0 is random mod 2,!.
最初に、鶴か亀に着眼する(亀).

鶴と亀とどちらが足が多いか(亀) :-
        一羽の鶴の足の数(_鶴の足の数),
        一匹の亀の足の数(_亀の足の数),
        _亀の足の数 > _鶴の足の数,!.
鶴と亀とどちらが足が多いか(鶴).
*/