このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1358572977/
#  (問3) 与えられた自然数 N の 3 進数表示 a(p-1)a(p-2)...a(2)a(1)a(0) が、
#  これを逆に並べた数字の列 a(0)a(1)a(2)...a(p-2)a(p-1) と一致するかどうかを調べ、その結果を出力する 
#  (プログラム3) を作成した。たとえば、 (プログラム3) を実行して変数 N に 202 を入力すると、 
#  202 は 3 進数表示が 21111 であるから「一致しない」と出力される。また、変数 N に 203 を 
#  入力すると、 203 は 3 進数表示が 21112 であるから「一致する」と出力される。

'与えられた自然数 N の 3 進数表示 a(p-1)a(p-2)...a(2)a(1)a(0) が、
これを逆に並べた数字の列 a(0)a(1)a(2)...a(p-2)a(p-1) と一致するかどうかを調べ、その結果を出力する'(N) :-
        '与えられた自然数 N の 3 進数表示 a(p-1)a(p-2)...a(2)a(1)a(0) が'(N,[],_Nの3進数表示),
        'これを逆に並べた数字の列 a(0)a(1)a(2)...a(p-2)a(p-1) と一致するかどうかを調べ'(_Nの3進数表示,_結果),
        結果を出力する(_結果).

'与えられた自然数 N の 3 進数表示 a(p-1)a(p-2)...a(2)a(1)a(0) が'(0,L,L) :- !.
'与えられた自然数 N の 3 進数表示 a(p-1)a(p-2)...a(2)a(1)a(0) が'(N,L1,L) :-
        M is N mod 3,
        N_1 is N // 3,
        '与えられた自然数 N の 3 進数表示 a(p-1)a(p-2)...a(2)a(1)a(0) が'(N_1,[M|L1],L).

'これを逆に並べた数字の列 a(0)a(1)a(2)...a(p-2)a(p-1) と'(L,一致する) :-
        reverse(L,L),!.
'これを逆に並べた数字の列 a(0)a(1)a(2)...a(p-2)a(p-1) と'(L,一致しない) :-
        \+(reverse(L,L)).

結果を表示する(_結果) :-
        writef('%t\n',[_結果]).