簡體   English   中英

多對多-Prolog / Excel

[英]Many to Many - Prolog / Excel

在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

但是我只希望有發票數量。

這是筆錄:

$ 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.

?- 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM