如何使用算术运算符在数据库中查找特定值

时间:2019-04-02 18:10:21

标签: prolog

我的这个基地有些问题。在提出问题:?- car(X,_,_,Y=<20000)之后,我不知道如何强制回答“真”或“假”以外的其他答案。

哪些汽车行驶了不到20000公里(列表中的最后一个数字)?

我累了:

Z=20000
car(X,_,_,Y) :-
Y=<Z
car(X,_,_,Y).

我还有两个问题:

  1. 是否有必要申请use_module(library(clpfd))

  2. 我应该创建某种类型的函数还是什么?

car(opel, red, 2011, 10000).
car(bmw, black, 2010, 0).
car(bmw, green, 1999,20000).
car(bmw, black, 2015,10000).
car(fiat, white, 1988,100000).
car(fiat, red, 2000,200000).
car(nissan, black, 2014, 10000).
car(jaguar, silver, 2014, 10000).
car(opel, black, 2000, 150000).
car(opel, white, 2000, 15000).

我希望swi-prolog可以向我显示所有行驶不到20000公里的汽车。当然可以逐行按下;按钮。

1 个答案:

答案 0 :(得分:1)

Prolog不是一种功能语言。因此,在您的car(X,_,_,Y=<20000)查询中,Y=<20000只是名称为=<和两个参数Y2000的复合词。当将此复合项用作car/4谓词的参数时,不会作为函数进行求值;您需要将其用作目标,如下所示。请尝试:

?- car(Brand, _, _, Mileage), Mileage =< 20000.
Brand = opel,
Mileage = 10000 ;
Brand = bmw,
Mileage = 0 ;
Brand = bmw,
Mileage = 20000 ;
Brand = bmw,
Mileage = 10000 ;
Brand = nissan,
Mileage = 10000 ;
Brand = jaguar,
Mileage = 10000 ;
Brand = opel,
Mileage = 15000.