简单序言,初学者学习
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 对于每个地区都是唯一的(例如、LA
或 NEWYORK
).如果不是这种情况,那么数据中就需要另一种方式来区分不同订单的代码,如果它们确实不同的话。如果需要简单地确保发票的唯一性,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,_,_,_,_,_,_).
我有以下序言;
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 对于每个地区都是唯一的(例如、LA
或 NEWYORK
).如果不是这种情况,那么数据中就需要另一种方式来区分不同订单的代码,如果它们确实不同的话。如果需要简单地确保发票的唯一性,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,_,_,_,_,_,_).