0

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

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.

4

1 回答 1

3

抱歉,我不明白你的逻辑分析是什么。

我可以说,从您的代码中,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不是第二个解决方案,而是(如果我没记错的话)失败的尝试(通过回溯)获得第二个解决方案。

于 2016-10-01T01:04:07.770 回答