我的这个基地有些问题。在提出问题:?- car(X,_,_,Y=<20000)
之后,我不知道如何强制回答“真”或“假”以外的其他答案。
哪些汽车行驶了不到20000公里(列表中的最后一个数字)?
我累了:
Z=20000
car(X,_,_,Y) :-
Y=<Z
car(X,_,_,Y).
我还有两个问题:
是否有必要申请use_module(library(clpfd))
?
我应该创建某种类型的函数还是什么?
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公里的汽车。当然可以逐行按下;按钮。
答案 0 :(得分:1)
Prolog不是一种功能语言。因此,在您的car(X,_,_,Y=<20000)
查询中,Y=<20000
只是名称为=<
和两个参数Y
和2000
的复合词。当将此复合项用作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.