このディレクトリの索引

http://pc12.2ch.net/test/read.cgi/tech/1258158172/368
# [1] 授業単元: プログラミング実習
# [2] 問題文(含コード&リンク):
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10180.txt
#
# 〜課題2〜
# int型整数の4乗を返す関数
# int pow4(int x)
# を作成せよ。(ただし関数powは使用しない)
#
# (実行例)
# 整数を入力してください:5
# その4乗値は625です。
% Prolog 4乗を定義は以下が代表的なもの。

pow4(X,Y) :- Y is X * X * X * X.

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

pow4(X,Y) :- Y is X ^ 4.

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

pow4(X,Y) :- pow4(4,X,Y).

pow4(1,X,X) :- !.
pow4(N,X,Y) :- N1 is N - 1,pow4(N1,X,Z),Y is X * Z.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pow4(X,Y) :- pow4(1,4,X,Y).

pow4(M,N,_,1) :- M > N,!.
pow4(M,N,X,Y) :- M1 is M + 1,pow4(M1,N,X,Z),Y is X * Z.

:デフォルトの名無しさん:2009/11/26(木) 19:20:17
>>263 4乗の定義は  ですね。

pow4(M1,N,X,Z),Y is X * Z.
と再帰の外側に演算が来るのがちょっと気になりますね。

pow4(X,Y) :- pow4(1,4,X,X,Y).

pow4(M,N,_,Y,Y) :- M > N,!.
pow4(M,N,X,Y1,Y) :- Y2 is X * Y1,M2 is M + 1,pow4(M2,N,X,Y2,Y).

とすれば中に入ります。ただ、この手の先読み的手法がわかりやすいかどうか。