このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1322562648/128
#  1] 授業単元:C言語 
#  [2] 問題文(含コード&リンク): 
#  1番:コマンドライン引数を用いて2つの10進数を入力し, 
#  その2つの数を2進数表示したものについて,論理和,論理積, 
#  排他的論理和,を表示するプログラムを作成せよ。 
#  また,2進数で直接入力して計算できるようにせよ。 
#   
#  2番:1番で求めた論理和,論理積,排他的論理和について、 
#  指定したビット目の値、連続する0の数および1の数をそれぞれ数えて 
#  交互に表示するプログラムを作成せよ。 
#   
#  3番目:1番で求めた論理和,論理積,排他的論理和について、 
#  4桁ずつ区切って16進数で表示するプログラムを作成せよ. 
#   
#  例: 
#  論理和 : 000111101001001 
#  1番目の区切り:0001 = 1 
#  2番目の区切り:1110 = e 
#  3番目の区切り:1001 = 9 
#  4番目の区切り:001  = 1 
#  

'4桁ずつ区切って16進数で表示する'(L) :-
        '4桁ずつ区切って16進数で表示する'(_n,L).

'4桁ずつ区切って16進数で表示する'(_n,L) :-
        length(L0,4),
        append(L0,L1,L),
        表示する(_n,L0),
        _n_2 is _n + 1,
        '4桁ずつ区切って16進数で表示する'(_n_2,L1).
'4桁ずつ区切って16進数で表示する'(_n,L) :-        
        表示する(_n,L).

表示する(_n,L) :-
        '16進数表示'(L,_16進数表示),
        concat_atom(L,_2進数表示),
        writef('%t番目の区切り : %t = %t\n',[_n,_2進数表示,_16進表示]),!.

'16進数表示'([1,0,1,0],a) :- !.
'16進数表示'([1,0,1,1],b) :- !.
'16進数表示'([1,1,0,0],c) :- !.
'16進数表示'([1,1,0,1],d) :- !.
'16進数表示'([1,1,1,0],e) :- !.
'16進数表示'([1,1,1,1],f) :- !.
'16進数表示'([A,B,C,D],N) :-
        N is A * 8 + B * 4 + C * 2 + D,!.
'16進数表示'(L,N) :-
        '16進数表示'(L,0,N).

'16進数表示'([],N,N).
'16進数表示'([B|R],N_1,N) :-
        N_2 is N_1 * 2 + B,
        '16進数表示'(R,N_2,N).