1 вариант:
fib(0,1,1).
fib(D,M,N):-
D > 0,
D1 is D-1,
fib(D1,M1,N1),
N is M1,
M is M1 + N1.
где, D-порядковый номер, а M и N-соседние числа. Тест:
?- fib(10,N,M).
N = 144,
M = 89 .
myfib(D,P,D,P,_) :- !.
myfib(D,P,I,N,M) :-
I1 is I+1,
N1 is N+M,
M1 is N,
myfib(D,P,I1,N1,M1).
fib(D,P) :-
myfib(D,P,1,1,1).
2 вариант:
myfib(D,P,D,P,_) :- !.
myfib(D,P,I,N,M) :-
I1 is I+1,
N1 is N+M,
M1 is N,
myfib(D,P,I1,N1,M1).
fib(D,P) :-
myfib(D,P,1,1,1).
3 вариант (Visual Prolog 7.2):
fib(0)=1:-!.
fib(1)=1:-!.
fib(N) = fib(N-1)+fib(N-2).
4 вариант (Visual Prolog 7.2):
fib(X,Y,3)=X+Y:-!.
fib(X,Y,N) = fib(Y,X+Y,N-1).
третий аргумент - индекс искомого члена, способ вызова 46-го члена: N=fib(1,1,46) |