带有多余假解的递归Prolog函数



我很难理解为什么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不是第二个解决方案,但(如果我没有错的话)一个失败的尝试获得(通过回溯)第二个解决方案

最新更新