このディレクトリの索引
% 二進数が要素(1,0)のリストとして与えられた時の、左シフト、右シフト
% 二進数リストを L 左右のシフト数を N で与える。

sfl(N,L,X) :-
    sfl_1(0,N,L,L1,L2),
    append(L1,L2,X),!.

sfl(N,L,OVF,X) :-
    sfl_1(0,N,L,L1,L2,OVF),
    append(L1,L2,X).

sfl_1(_,_,[],[],[],[]) :- !.
sfl_1(E,E,L1,L1,[],[]) :- !.
sfl_1(N,E,[A|R],L1,[0|R2],[A|OVF]) :-
    M is N + 1,
    sfl_1(M,E,R,L1,R2,OVF).

sfl_1(_,_,[],[],Y) :- !.
sfl_1(E,E,L1,L1,[]) :- !.
sfl_1(N,E,[_|R],L1,[0|R2]) :-
    M is N + 1,
    sfl_1(M,E,R,L1,R2).

sfr(N,L,X) :-
    reverse(L,L1),
    sfl(N,L1,Y),
    reverse(Y,X),!.

sfr(N,L,OVF,X) :-
    reverse(L,L1),
    sfl(N,L1,OVF2,Y),
    reverse(OVF2,OVF),
    reverse(Y,X),!.