このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1284632294/948
#  [1] 授業単元: プログラミング 
#  [2] 問題文(含コード&リンク):  
#  ビット演算子 
#  データ出力用変数dを用いてループさせ、 
#  int型整数において、キーボードから数値を入力して下位からi番目のビットを1にセットする。 
#   
#  条件は、 
#  値が0→break 
#  値が正→対応するビットをON(1〜8) 
#  値が負→対応するビットをOFF 
#  (値が大きすぎたらエラーにする) 
#   
#  

'データ出力用変数dを用いてループさせ、int型整数において、キーボードから数値を入力して下位からi番目のビットを1にセットする。'(_d)  :-
        整数を得る(_値),
        対応するビットのON・OFF(_値,_d,_ビットにセットされたd表示),
        write_formatted('%t\n',[_ビットにセットされたd表示]),!.

対応するビットのON・OFF(0,_,_) :- !,fail.
対応するビットのON・OFF(_値,_,_) :- _値 > 8,!,fail.
対応するビットのON・OFF(_値,_d,_ビットにセットされたd表示) :-
        値が正(_値),
        対応するビットをON(_値,_d,_ビットにセットされたd表示).
対応するビットのON・OFF(_値,_d,_ビットにセットされたd表示) :-
        値が負(_値),
        対応するビットをOFF(_値,_d,_ビットにセットされたd表示).

値が正(_値) :- _値 > 0.

値が負(_値) :- _値 < 0.

対応するビットをON(_値,_d,_ビットにセットされたd表示) :-
        二進数(_d,L),
        _値_1 is _値 - 1,
        length(R,_値_1),
        append(L0,[_|R],L),
        append(L0,[1|R],L2),
        concat_atom(L2,_ビットにセットされたd表示).

対応するビットをOFF(_値,_d,_ビットにセットされたd表示) :-
        二進数(_d,L),
        _値_1 is _値 - 1,
        length(R,_値_1),
        append(L0,[_|R],L),
        append(L0,[0|R],L2),
        concat_atom(L2,_ビットにセットされたd表示).