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

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


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

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

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

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


'掛ける数の側が奇数になった場合、掛けられる数の側に印をつけておきます。'(L2) :-
        append(L,L,L2).


'掛けられる数を順番に2倍していき、'(L1,L2) :-
        append(L1,L1,L2).



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

'掛ける数のほうは1になるまで2で割っていきます。割り切れなかった場合は切り捨てます。'(L1,L2) :-
        append(L2,[_|L2],L1),!.