このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1335517816/300
#  [1] 授業単元: プログラミング 
#  [2] 問題文(含コード&リンク):  
#  x_i∈{0,1}であるとき、次の漸化式で与えられる数列(M系列)を示しなさい。 
#  また、p>1と得られる系列の周期について考察しなさい。 
#        x_n=x_(n-1)+x_(n-p) 
#  ただし、加算+は排他的論理和(XOR)を表す。 
#  また、第p-1項まではすべてが0である場合を除いて、scanfで任意に与えてよい。  
#  実行例には、次の場合を含めなさい。 
#   
#  p=3: 初期値 x_0=1, x_1=0, x_2=0 のとき、x_3=1, x_4=1, x_5=1, x_6=0 
#   
#        XOR       0         1 
#        0         0         1 
#        1         1         0 
#   
#  

'0起点のnth'(_nth,L,A) :-
        length(L0,_nth),
        append(L0,[A|R],L).

'x_n=x_(n-1)+x_(n-p)'(_n,_p,L1) :-
        'x_n=x_(n-1)+x_(n-p)'(_p,_n,_p,_L1,L2),
        数列を示しなさい(_p,_n,L2).

'x_n=x_(n-1)+x_(n-p)'(_n,Max,_p,L,L) :-
        _n > Max,!.
'x_n=x_(n-1)+x_(n-p)'(_n,Max,_p,L1,L) :-
        'x_n'(_n,_p,L1,Z),
        _n_2 is _n + 1,
        append(L1,[Z],L2),
        'x_n=x_(n-1)+x_(n-p)'(_n_2,Max,_p,L2,L).

'x_n'(_n,_p,L1,X,Y) :-
        _n_1 is _n - 1,
        _n_p is _n - _p,
        '0起点のnth'(_n_1,L1,X),
        '0起点のnth'(_n_p,L1,Y),
        Z is X xor Y.

数列を示しなさい(_n,_p,L) :-
        writef('p=%t: 初期値 ',[_p]),
        _p_1 is _p - 1,
        表示する(0,_p_1,L),
        write(' のとき、'),
        表示する(_p,_n,L).

表示する(_n,_n,_) :-
        '0起点のnth'(_nth,L,A),
        writef('X_%t=%t\n',[_nth,A]),!.
表示する(_nth,_n,L) :-
        '0起点のnthを表示'(_nth,L,A),
        _nth_2 is _nth + 1,
        表示する(_nth_2,_n,L).

'0起点のnthを表示'(_nth,L,A) :-
        '0起点のnth'(_nth,L,A),
        writef('X_%t=%t,',[_nth,A]),!.