2010-03-07 53 views
0

我想在某些情况下创建一些规则和事实。情况是这样的,如果用户欠款,那么如果他没有偿还,他会在5天后偿还债务,如果他不是,那么他是正常人。到目前为止,我与类似的实验:关于序言的问题

我有两个规则:

debtpayment_unfulfilled(X) :- owes_money(W, Amountowed, Amountpaid, Days), Days >= 7,Amountowed > Amountpaid. . 
debtpayment_fulfilled(X) :- debt_paid(W,Amountowed,Amountpaid), Amountowed =:= Amountpaid. 
owes_money(jim, 500, 200, 8). 

,但我似乎无法得到它来编译,XSB告诉我有条款#未绑定变量EXPR 1 ...

有什么想法吗?编辑废料,我刚刚得到它编译大声笑,错字,顺便说一句裁决看起来正确的即时通讯试图做什么? 当我尝试运行它,我不能得到与查询的答案:

debtpayment_unfulfilled(jim). 

编辑:

是有可能做这样的事情:

debtpayment_unfulfilled(X) :- owes_money(X, Amountowed, Amountpaid, Days), Days >= Days + 7,Amountowed > Amountpaid. 

天+ 7位或者这是不可能的?

+0

什么是你想用这个来完成:'天数> =天+ 7' – MatrixFrog 2010-03-07 19:08:42

+0

实际上也许应该是天+7> =天数?我需要尝试做的事情是7天过去了,这部分陈述将是真实的,但问题是例如owes_money(jim,5,2,8) - jim在第8天开始欠款希望你看到这个问题? – KP65 2010-03-07 19:59:44

+0

好的,首先,最好对每个新问题提出一个新问题,因为一遍又一遍地编辑同一个问题使得难以遵循(并且答案相同)。现在,形式为Days + 7> = Days(或Days> = Days + 7)的表达式是没有意义的,因为一旦Days被绑定到一个值,表达式将始终为false。 – 3lectrologos 2010-03-07 22:24:32

回答

1

您的错误是您在debtpayment_unfulfilledowes_money中使用了不同的变量名称。试试这个:

debtpayment_unfulfilled(X) :- owes_money(X, Amountowed, Amountpaid, Days), Days >= 7,Amountowed > Amountpaid. 
debtpayment_fulfilled(X) :- debt_paid(X, Amountowed, Amountpaid), Amountowed =:= Amountpaid. 
owes_money(jim, 500, 200, 8). 
+0

欢呼声,我认为它有窍门,但我想知道,而不是有两个规则实现/未实现不会有更好的说第一个(未实现),因为它会告诉你,如果偿还债务和如果评估结果为假,它是否还没有支付? – KP65 2010-03-07 15:52:14

+0

我以前没有太多考虑语义。是的,因为完成/未实现是完全相反的(现在看不到它们的方式),所以最好只有一条规则。 – 3lectrologos 2010-03-07 16:02:06

+0

请参阅我编辑的编辑,也许你可以帮忙? – KP65 2010-03-07 18:59:52