このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1342966104/465
#  [1] 授業単元:C言語徹底入門 
#  [2] 問題文(含コード&リンク):http://ime.nu/codepad.org/lgXR0ur1 
#  次のプログラムは書式指定可能な10進16進変換表示を行う関数プログラムである。 
#  関数の機能についてコメントで解説を入れ、同時にプログラムの流れを説明せよ。 
#  

'16進数文字表現'(N,_16進数文字表現) :-
findall(A,'16進数の下から一桁ずつ16進数0-15文字表現'(N,A),L),
反転して16進数文字表現に変換(L,_16進数文字表現).

'16進数の下位桁から一桁ずつ16進数0-15文字表現'(N,A) :-
'16進数の下一桁'(N,M),
'16進数0-15文字表現'(M,A).

'16進数0-15文字表現'(N,A) :-
length(L,N),
append([_|L],_,['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']),
last([_|L],A).

'16進数の下一桁'(0,_) :- !,fail.
'16進数の下一桁'(N,M) :-
最下位桁を得る(N,M).
'16進数の下一桁'(N,M) :-
上位桁の16進数の下一桁(N,M).

最下位桁を得る(N,M) :-
M is N mod 16.

上位桁の16進数の下一桁(N,M) :-
D is N // 16,
'16進数の下一桁'(D,M).

反転して16進数文字表現に変換(_下位桁からの16進数文字ならび,_16進数文字表現) :-
reverse(_下位桁からの16進数文字ならび,_16進数文字ならび),
atomic_list_concat(_16進数文字ならび,_16進数文字表現).