如何在另一个谓词中使用谓词值

时间:2018-04-12 00:31:48

标签: prolog

我的规则看起来像这样。

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.

所以这有什么问题,为什么我没有在谓词中得到这个值。

1 个答案:

答案 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 ?-