GNU Prolog Fibonacci Generator Fails to Create

This is my code: -

fib(0,0).
fib(1,1).
fib(F,N) :-
    N>1,
    N1 is N-1,
    N2 is N-2,
    F is F1+F2,
    fib(F1,N1),
    fib(F2,N2),
    write(F," ,").

In consultation with GNU Prolog, I get:

| ?- consult('C:/GNU-Prolog/bin/fib.pl').
compiling C:/GNU-Prolog/bin/fib.pl for byte code...
C:/GNU-Prolog/bin/fib.pl compiled, 3 lines read - 1253 bytes written, 15 ms

yes
| ?- fib(F,2).
uncaught exception: error(instantiation_error,(is)/2)
+4
source share
4 answers

The message creation error was caused by an attempt to calculate Fbefore the F1and values ​​are determined F2. The easiest solution is to move F is F1+F2after recursive calls so that your program becomes

fib(0,0).
fib(1,1).
fib(F,N) :- 
    N>1,
    N1 is N-1,
    N2 is N-2,
    fib(F1,N1),
    fib(F2,N2),
    F is F1+F2,
    write(F," ,").

(thanks @mbratch for the reminder) writehas only one argument, i.e. write(F," ,").it should bewrite(F), write(" ,").

. : , fib(F,3) fib(F1,2) fib(F2,1), fib(F1,2) fib(F11,1) fib(F12,1), 1, 1, 2, 1, 3, , ?

+5

, F is F1+F2 F1 F2. -, . , , ( , N, ).

fib(0,0).
fib(1,1).
fib(F,N) :-
    N>1,
    N1 is N-1,
    N2 is N-2,
    fib(F1,N1),
    fib(F2,N2),
    F is F1+F2,
    format('~w, ',[F]).

format write, , write/2 , .

+2
fab1(1,1).
fab1(2,1).
fab1(N,T):-
    N>2,
    N1 is N-1,
    N2 is N-2,
    fab1(N1,T1),
    fab1(N2,T2),
    T is (T1+T2),
+1

N,N1,N2,Ans=integer

test(integer,integer)
findfibo(integer,integer)
go

go:-
    write("Enter number"),nl,
    readint(N),
    test(1,N).
go.
test(0,N).
test(X,N):-
    X<=N,
    findfibo(X,Ans),
    write(Ans," ,"),
    X1=X+1,
    test(X1,N).



findfibo(1,1).
findfibo(2,1).
findfibo(N,Ans):-
    N>1,
    N1=N-1,
    N2=N1-1,
    findfibo(N1,Ans1),
    findfibo(N2,Ans2),
    Ans=Ans1+Ans2.

sampling Purpose: go Enter the number 10 1, 1, 2, 3, 5, 8, 13, 21, 34, 45, 55, Yes

0
source

Source: https://habr.com/ru/post/1534525/


All Articles