具有无关假解的递归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
时,表示没有进一步的解决方案。