このディレクトリの索引

http://pc12.2ch.net/test/read.cgi/tech/1258158172/308 
# 任意の0でない自然数nをキーボードで入力し、入力した数字が奇数の場合、
# その数字に3を掛けと1を足します。入力した数字が偶数の場合、その数字を2で割ります。 
# そして得られた数字に同様の操作をし、1に達した時点で終了します。
# そしてこの操作をした回数とこの操作で出た最大値を表示させたい。 

c132_308(N) :-
  c132_308(N,0,_操作した回数,N,_最大値),
  write_formatted('%t,%t\n',[_操作した回数,_最大値]).

c132_308(1,_操作した回数,_操作した回数,_最大値,_最大値) :-
  \+(_操作した回数=0),!.
c132_308(N,M,_操作した回数,Max1,_最大値) :-
  1 is N mod 2,
  N2 is N * 3 + 1,
  M2 is M + 1,
  現在の最大値は(N2,Max1,Max2),
  c132_308(N2,M2,_操作した回数,Max2,_最大値).
c132_308(N,M,_操作した回数,Max1,_最大値) :-
  0 is N mod 2,
  N2 is N // 2,
  M2 is M + 1,
  現在の最大値は(N2,Max1,Max2),
  c132_308(N2,M2,_操作した回数,Max2,_最大値).

現在の最大値は(A,B,A) :- A >= B.
現在の最大値は(A,B,B) :- A < B.