このディレクトリの索引
#  
#  キーボードからNを入力し、Sum = 1の4乗 + 2の4乗 + ... + Nの4乗 を表示しなさい
#  

'キーボードからNを入力し、Sum = 1の4乗 + 2の4乗 + ... + Nの4乗 を表示しなさい' :-
        'キーボードからNを入力し、'(_N),
        'Sum = 1の4乗 + 2の4乗 + ... + Nの4乗 を表示しなさい'(_N).

'キーボードからNを入力し、'(_N) :-
        整数を得る('N',_N > 2,_N).

'Sum = 1の4乗 + 2の4乗 + ... + Nの4乗  を計算して、表示しなさい'(_N) :-
        'Sum = 1の4乗 + 2の4乗 + ... + Nの4乗 を計算して、'(_N,_式表示文字列,_Sum),
        表示しなさい(_Sum,_式表示文字列).

'Sum = 1の4乗 + 2の4乗 + ... + Nの4乗 を計算して、'(_N,_式表示文字列,_Sum) :-
        '1の4乗 + 2の4乗 + ... + Nの4乗 を'(_N,_式文字列,_式表示文字列),
        計算して(_式文字列,_Sum).

'1の4乗 + 2の4乗 + ... + Nの4乗 を'(_N,_式文字列,_式表示文字列) :-
        findall([_4乗項文字列,_4乗表示文字列],(
                    between(1,_M,_N),
                    atomic_list_concat([_M,の4乗],_4乗表示文字列),
                    atomic_list_concat([_M,' ^ ',4],_4乗項文字列)),
                LL),
        式文字列と式表示文字列を分離(LL,_式文字列,_式表示文字列).

式文字列と式表示文字列を分離(LL,_式文字列,_式表示文字列) :-
        転置(LL,[L1,L2]),
        atomic_list_concat(L1,' + ',_式文字列),
        atomic_list_concat(L2,' + ',_式表示文字列).

計算して(_式文字列,_Sum) :-
        atom_to_term(_式文字列,_式,_),
        _Sum is _式.

表示しなさい(_Sum,_式表示文字列) :-
        writef('%t = %t\n',[_Sum,_式文字列]).