このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1312201995/974
#  
#  C言語でロシア農民の掛け算のプログラムを教えてくれ ください 
#  


ロシア農民の掛け算(_掛けられる数,_掛ける数,_答え) :-
        '掛けられる数を順番に2倍していき、掛ける数のほうは1になるまで2で割っていきます。割り切れなかった場合は切り捨てます。 また、掛ける数の側が奇数になった場合、掛けられる数の側に印をつけておきます。そして、チェックの付いたものを足し合わせます。'(_掛けられる数,_掛ける数,_答え).


'掛けられる数を順番に2倍していき、掛ける数のほうは1になるまで2で割っていきます。割り切れなかった場合は切り捨てます。 また、掛ける数の側が奇数になった場合、掛けられる数の側に印をつけておきます。そして、チェックの付いたものを足し合わせます。'(_掛けられる数,_掛ける数,_答え) :-
        '掛けられる数を順番に2倍していき、掛ける数のほうは1になるまで2で割っていきます。割り切れなかった場合は切り捨てます。 また、掛ける数の側が奇数になった場合、掛けられる数の側に印をつけておきます。'(_掛けられる数,_掛ける数,_印の付いた数ならび),
        'そして、チェックの付いたものを足し合わせます。'(_印の付いた数ならび,_答え).

'掛けられる数を順番に2倍していき、掛ける数のほうは1になるまで2で割っていきます。割り切れなかった場合は切り捨てます。 また、掛ける数の側が奇数になった場合、掛けられる数の側に印をつけておきます。'(_掛けられる数,1,[_掛けられる数]) :- !.

'掛けられる数を順番に2倍していき、掛ける数のほうは1になるまで2で割っていきます。割り切れなかった場合は切り捨てます。 また、掛ける数の側が奇数になった場合、掛けられる数の側に印をつけておきます。'(_掛けられる数,_掛ける数,[_掛けられる数|R]) :- !.
        '掛ける数の側が奇数になった場合、掛けられる数の側に印をつけておきます。'(_掛ける数),
        '掛けられる数を順番に2倍していき、'(_掛けられる数,_掛けられる数_2),
        '掛ける数のほうは1になるまで2で割っていきます。割り切れなかった場合は切り捨てます。'(_掛ける数,_掛ける数_2),
        '掛けられる数を順番に2倍していき、掛ける数のほうは1になるまで2で割っていきます。割り切れなかった場合は切り捨てます。 また、掛ける数の側が奇数になった場合、掛けられる数の側に印をつけておきます。'(_掛けられる数_2,_掛ける数_2,R),!.

'掛けられる数を順番に2倍していき、掛ける数のほうは1になるまで2で割っていきます。割り切れなかった場合は切り捨てます。 また、掛ける数の側が奇数になった場合、掛けられる数の側に印をつけておきます。'(_掛けられる数,_掛ける数,R) :-
        '掛けられる数を順番に2倍していき、'(_掛けられる数,_掛けられる数_2),
        '掛ける数のほうは1になるまで2で割っていきます。割り切れなかった場合は切り捨てます。'(_掛ける数,_掛ける数_2),
        '掛けられる数を順番に2倍していき、掛ける数のほうは1になるまで2で割っていきます。割り切れなかった場合は切り捨てます。 また、掛ける数の側が奇数になった場合、掛けられる数の側に印をつけておきます。'(_掛けられる数_2,_掛ける数_2,R),!.


'掛ける数の側が奇数になった場合、掛けられる数の側に印をつけておきます。'(_掛ける数) :-
        1 is _掛ける数 mod 2.


'掛けられる数を順番に2倍していき、'(_掛けられる数,_掛けられる数_2) :-
        _掛けられる数_2 is _掛けられる数 * 2.


'掛ける数のほうは1になるまで2で割っていきます。割り切れなかった場合は切り捨てます。'(_掛ける数,_掛ける数_2) :-
        _掛ける数_2 is _掛ける数 // 2.


'そして、チェックの付いたものを足し合わせます。'([],0).
'そして、チェックの付いたものを足し合わせます。'([N|R],_印の付いた数の合計) :-
        'そして、チェックの付いたものを足し合わせます。'(R,_印の付いた数の合計_1),
         _印の付いた数の合計 is _印の付いた数の合計_1 + N.