[英]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.