我的规则看起来像这样。
cars(ferrari, 320).
cars(ford, 270).
cars(mercedes, 280).
cars(toyota, 220).
我有一个谓词,我想检查一辆特定的汽车是否更快。
is_faster(Carmodel):-
cars(Carmodel,X),
X > 250.
所以当我写is_faster(法拉利)时,我希望得到真实,但是当我使用trace
时。我发现没有返回X
值?
如果我做的话,在我的控制台中
cars(ferrari,X).
X = 320.
true.
所以这有什么问题,为什么我没有在谓词中得到这个值。
答案 0 :(得分:1)
我认为这应该是一个评论,但评论不允许格式化文字,这是说明trace
所必需的。
当您按照SWI Prolog中的说明加载代码时,您应该看到:
2 ?- trace.
true.
[trace] 2 ?- is_faster(ferrari).
Call: (8) is_faster(ferrari) ? creep
Call: (9) cars(ferrari, _5220) ? creep % Anonymous variable _5220 (instead of X)
Exit: (9) cars(ferrari, 320) ? creep % Found 320 for ferrari
Call: (9) 320>250 ? creep
Exit: (9) 320>250 ? creep
Exit: (8) is_faster(ferrari) ? creep
true.
[trace] 3 ?-