具有无关假解的递归Prolog函数

具有无关假解的递归Prolog函数,prolog,solution,prolog-toplevel,Prolog,Solution,Prolog Toplevel,我很难理解为什么fib([1,2],F)用以下条款和规则找到第二个解决方案false: fib([A,B|C],F) :- fib([B|C],S), fib(C,T), F is (S+T). fib([A],1). fib([],0). 根据我对fib([1,2],F)的逻辑分析,我应该得到结果F=2。我需要一些帮助来理解为什么Prolog会找到第二个解决方案,即false对不起,我不明白逻辑分析系统可以是什么 我可以说,从你的代码中,用fib([1,2],F)我只得到F

我很难理解为什么
fib([1,2],F)
用以下条款和规则找到第二个解决方案false:

fib([A,B|C],F) :-
   fib([B|C],S),
   fib(C,T),
   F is (S+T).
fib([A],1).
fib([],0).

根据我对fib([1,2],F)的逻辑分析,我应该得到结果
F=2
。我需要一些帮助来理解为什么Prolog会找到第二个解决方案,即
false

对不起,我不明白逻辑分析系统可以是什么

我可以说,从你的代码中,用
fib([1,2],F)
我只得到
F=1
,而不是
F=2
;这是因为
fib([1,2],F)

fib([1,2],1) :-
  fib([1],1),
  fib([],0),
  1 is (0+1).

false
不是第二个解决方案,但(如果我没有错的话)尝试获取第二个解决方案(通过回溯)失败。

对不起,我不明白您的逻辑分析系统可以是什么

我可以说,从你的代码中,用
fib([1,2],F)
我只得到
F=1
,而不是
F=2
;这是因为
fib([1,2],F)

fib([1,2],1) :-
  fib([1],1),
  fib([],0),
  1 is (0+1).

false
不是第二个解决方案,而是(如果我没有错的话)试图获得第二个解决方案(通过回溯)的失败尝试。

您希望fib/2谓词做什么?我认为没有第二个答案。如果您得到第一个答案,然后手动要求prolog给您第二个答案,它会以
false
响应,表示没有其他解决方案。您希望fib/2谓词做什么?我认为没有第二个答案。如果您得到第一个答案,然后手动要求prolog给您第二个答案,它会以
false
响应,表示没有其他解决方案。这是完全正确的。当顶层显示
false
时,表示没有进一步的解决方案。这是完全正确的。当顶层显示为
false
时,表示没有进一步的解决方案。