recursion - 如何使用有限谓词递归确定序言中的商?
问题描述
所以我一直试图通过只使用内置谓词“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,直到它在第一次调用时返回,但它不会。顺便说一句,我必须将此签名用于我的谓词。这是大学的任务。任何帮助表示赞赏!
解决方案
我自己找到了解决方案:
div(0,0,_).
div(Quotient, Dividend, Divisor) :-
Rest is Dividend - Divisor,
div(NewQuotient, Rest, Divisor),
Quotient is NewQuotient + 1.
推荐阅读
- java - JavaFX 字符间距太大(可能的字体抗锯齿错误?)
- docker - docker M1 错误上的 headless chrome - 无法在 chrome 中发现打开的窗口
- java - 单一PC上的多个应用程序
- python - 停止从 aiogram bot 发送消息
- javascript - 加载父元素时添加元素
- c# - 制作计算器
- javascript - webelement selenium - 如何使用 xpath 找到元素并使用 onclick 链接
- javascript - 我们如何对 grails 中的几列表格进行排序?
- javascript - foo() {} 和 foo 的方法声明区别:function() {}
- node.js - 将时刻日期转换为时刻日期范围内的 graphql iso 日期?