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