% Berechnung der Fibonacci-Folge
% für Amzi! Prolog
% Wolfgang.Urban@schule.at

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Algorithmus 1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

fibo1(1,1).
fibo1(2,1).

fibo1(N,F) :-
    N > 2,
    N1 is N - 1,
    N2 is N - 2,
    fibo1(N1,F1),
    fibo1(N2,F2),
    F is F1 + F2.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Algorithmus 2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

dynamic fibo2liste/2.        % Regel mit 2 Parametern, nicht kompilieren

fiboliste(2,1).                % erste Werte manuell
fiboliste(1,1).

fibo2(N,F) :-                 % falls Wert bereits berechnet wurde
    fiboliste(N,F).
fibo2(N,F) :-
    N > 2,
    N1 is N - 1,
    N2 is N - 2,
    fibo2(N1,F1),
    fibo2(N2,F2),
    F is F1 + F2,                % neu berechnet
    asserta( fiboliste(N,F) ).  % in Datenbasis vorn einfügen


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Verwendung:
%  
% fibo1(10,X).   % bindet X an 55
% fibo2(10,X).   % bindet X an 55