このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1322562648/187
#  Xの出力値を教えてください。 
#  答えは「81」になるのですがどのように解けばいいのでしょうか? 
#  http://ime.nu/iup.2ch-library.com/i/i0494298-1322907406.jpg 
#   
#          開始
#           ↓ 
#         0 → X
#         1 → Y
#     →→→→ ↓
#     ↑    ↓
#     ↑   X + Y → X
#     ↑   Y + 2 → Y
#     ← Y =< 15
#           ↓
#         X + Y → X
#         Xの出力

'Xの出力値を教える' :-
        'Xの出力値を'(_Xの出力値),
        教える(_Xの出力値).

'Xの出力値を'(_Xの出力値) :-
        X_0 = 0,
        Y_0 = 1,
        再帰部分(X_0,Y_0,X_1,Y_1),
        _Xの出力値 is X_1 + Y_1,

教える(_Xの出力値) :-
        writef('Xの出力値は %t です。\n',[_Xの出力値]).

再帰部分(X_1,Y_1,X,Y) :-
        X_2 is X_1 + Y_1,
        Y_2 is Y_1 + 2,
        再帰部分評価(X_2,Y_2,X,Y).

再帰部分評価(X_2,Y_2,X,Y) :-
        Y_2 =< 15,
        再帰部分(X_2,Y_2,X,Y).
再帰部分評価(X,Y,X,Y) :-
        \+(Y =< 15).

%  
%  冗長で却って分かり難いコードとなった。しかし仕様に忠実で説明的であることは
%  常に値打ちがあると思う。
%