因此,我一直在尝试仅通过使用内置谓词“ is”,“ *”,“ +”和“-”来确定序言中的整数商。它期望商是整数,所以我不需要任何小数或余数。
我很快想出了一个解决方案,但是由于某种原因,它只是无法按预期工作。它总是给我同样的错误,但我根本无法弄清楚自己在做什么错。我是新来的序言。而且由于大学,我必须研究一下。
这是我正在尝试的:
div(0, 0, _).
div(1, Dividend, Dividend).
div(Quotient, Dividend, Divisor) :-
NewDividend is Dividend - Divisor,
div(NewQuotient, NewDividend , Divisor),
NewQuotient + 1 is Quotient.
从交换东西到添加更多谓词,例如“ div(Dividend,Dividend,1)”,我基本上都尝试过。
这是我输入div(Y,15,3)时显示的内容。
ERROR: Arguments are not sufficiently instantiated
ERROR: In:
ERROR: [13] 0+1 is _2768
ERROR: [12] div(_2798,3,3) at div.pl:63
ERROR: [11] div(_2826,6,3) at div.pl:63
ERROR: [10] div(_2854,9,3) at div.pl:63
ERROR: [9] div(_2882,12,3) at div.pl:63
ERROR: [8] div(_2910,15,3) at div.pl:63
ERROR: [7] <user>
我有点理解错误要告诉我什么,但是我不明白为什么它无法按我期望的那样工作。如果除数为0,则商为0,然后从那里开始加1,直到它在第一次调用时返回,但不会。顺便说一下,我必须将此签名用于我的谓词。这是大学的作业。 任何帮助表示赞赏!
答案 0 :(得分:0)
我自己找到了解决方案:
div(0,0,_).
div(Quotient, Dividend, Divisor) :-
Rest is Dividend - Divisor,
div(NewQuotient, Rest, Divisor),
Quotient is NewQuotient + 1.