简单序言,初学者学习

Simple prolog, beginner learning

我有以下序言;

customer(Invoice,_,Surname,_,Town),(Town='LA';Town='NEWYORK'),
order(Invoice,Code,_),
item(Code,_,_,_,_,_,_)

上面的序言产生了结果;

Invoice = 51, Surname = 'Hally', Town = 'LA', Code = 54 ;

Invoice = 51, Surname = 'Hally', Town = 'LA', Code = 58 ;

Invoice = 51, Surname = 'Hally', Town = 'LA', Code = 85 ;

Invoice = 51, Surname = 'Hally', Town = 'LA', Code = 148 ;

Invoice = 71, Surname = 'Steptoe', Town = 'NEWYORK', Code = 148 ;

Invoice = 71, Surname = 'Steptoe', Town = 'NEWYORK', Code = 176 ;

Invoice = 73, Surname = 'Ahmed', Town = 'NEWYORK', Code = 180 ;

上面可以看到有两个结果,代码相同(148),我怎么只能return这两个结果呢?我试过添加 ,(Code=Code). 但它不起作用。

我真的是新手!

此外,我正在尝试将序言存储到一个新谓词中 return 这两个姓氏,如下所示,

getDuplicateOrders(Surname1, Surname2):- (prolog).

但是我收到一条错误消息,指出不应使用静态变量!

你必须把代码分开然后比较它们:

customer(Invoice1, _, Surname1, _, 'LA'),
customer(Invoice2, _, Surname2, _, 'NEWYORK'),
order(Invoice1, Code, _),
order(Invoice2, Code, _),    % We want the same code
item(Code,_,_,_,_,_,_).

当然,此代码假定 Invoice 对于每个地区都是唯一的(例如LANEWYORK).如果不是这种情况,那么数据中就需要另一种方式来区分不同订单的代码,如果它们确实不同的话。如果需要简单地确保发票的唯一性,dif/2 可以在这里工作:

customer(Invoice1, _, Surname1, _, 'LA'),
customer(Invoice2, _, Surname2, _, 'NEWYORK'),
dif(Invoice1, Invoice2),
order(Invoice1, Code, _),
order(Invoice2, Code, _),    % We want the same code
item(Code,_,_,_,_,_,_).