在Prolog中,我有一个像这样的数据库:
invoice(number,item,product,value).
invoice('2015/01',1,coffee,100).
invoice('2015/02',1,water,50).
invoice('2015/02',2,coffee,100).
invoice('2015/03',1,milk,80).
invoice('2015/03',2,cake,150).
我需要问Prolog这个问题:有多少发票没有咖啡或水? 在这种情况下,答案是1(发票号码2015/03)
我也想在Excel DB中回答这个问题。我使用" = countifs"功能,但它只给我一些不是咖啡或水的项目...这样的事情:
=COUNTIFS(D4:D11;"<>"&"coffee";D4:D11;"<>"&"water")
在这个例子中它给了我2,
但我想只有发票数量。
答案 0 :(得分:-2)
以下是成绩单:
$ gprolog
GNU Prolog 1.4.4 (64 bits)
....
Copyright (C) 1999-2013 Daniel Diaz
| ?- ['invoice'].
['invoice'].
yes
| ?- setof(N, I^P^V^(invoice(N,I,P,V), \+(P = water), \+(P = coffee)), Ns),
length(Ns, Number).
Ns = ['2015/03']
Number = 1
yes
| ?-
为了说明解决方案是标准的,这里是一个使用swi-prolog的略微缩写的成绩单:
$ swipl
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 6.6.4)
Copyright (c) 1990-2013 University of Amsterdam, VU Amsterdam
?- [invoice].
true.
?- setof(N, I^P^V^(invoice(N,I,P,V), \+(P = water), \+(P = coffee)), Ns), length(Ns, Number).
Ns = ['2015/03'],
Number = 1.
?-