簡體   English   中英

如何用有限的謂詞遞歸確定prolog中的商?

[英]How to recursively determine quotient in prolog with limited predicates?

所以我一直試圖通過僅使用內置謂詞“is”,“*”,“+”和“ - ”來確定prolog中整數的商。 它期望商是一個整數,所以我不需要任何小數或休息。

我很快想出了一個解決方案,但由於某種原因,它不會按預期工作。 它一直給我同樣的錯誤,我無法弄清楚我做錯了什么。 我是prolog btw的新手。 由於大學,我必須調查它。

這是我正在嘗試的:

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,直到它在第一次調用時回來但不會。 順便說一下,我必須使用這個簽名作為我的謂詞。 這是大學的一項任務。 任何幫助表示贊賞!

我自己找到了解決方案:

div(0,0,_).

div(Quotient, Dividend, Divisor) :- 
    Rest is Dividend - Divisor,
    div(NewQuotient, Rest, Divisor),
    Quotient is NewQuotient + 1.

暫無
暫無

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

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