问题标签 [clpr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
error-handling - 在 prolog 中没有充分实例化参数
我正在尝试运行此代码,但每当我使用此查询时都会收到此错误:gp174(P, S).
ERROR: >=/2: Arguments are not sufficiently instantiated.
这是我的代码:
我该怎么办?
我应该在哪里加载我的 clpr 库?
prolog - 使用 Prolog 解决不等式
我正在使用 prolog 解决不等式问题。我找到了一个代码,它解决了 ax+b>=0 类型的方程。
我使用的代码如下。
例如
当我们给出 {2*X+2>=5}。它给出了正确的答案。{X>=1.5}。
2.但是如果我输入像 {(X+3)/(3*X+1)>=1} 这样的分数。它给出 {1- (3+X)/ (1+3.0*X)=<0.0}。
我怎样才能解决这类不等式问题以找到最终答案。(包括分数的问题)。
请帮我。
如果有任何学习资料可以参考,请告诉我。
prolog - lib(ic) 的精确解决方案
使用 ECLiPSe Prolog,lib(ic)
我偶然发现了David H. Bailey 提出的以下问题,“解决科学计算中的数值异常”。Unum book提到了我。实际上,这只是其中的一部分。首先,让我根据 来制定方程(is)/2
。另外,请注意,所有这些十进制数字都以基数 2 浮点数(包括 IEEE)精确表示:
所以这确实是0.0(根本没有四舍五入)。但现在与$=
代替is
:
此区间不包含 0.0。我知道区间算术通常有点过于近似,如下所示:
但至少等式成立!但是,在第一种情况下,不再包括零。显然我没有理解一些东西。我也尝试过eval/1
,但无济于事。
Null
不包括的原因是什么0.0
?
(在@jschimpf 出人意料的回答之后编辑)
这是书中第 187 页的引文,我将其解释为数字被精确表示(现在划线)。
使用可以模拟 IEEE单精度的 {3,5} 环境。输入值是完全可表示的。...
{-1, 2}
...完成了
这项工作,用不到...
否则,第 184 页的声明成立:
...
0.80143857 x + 1.65707065 y = 2.51270273
这些方程式当然看起来很无辜。假设精确的十进制输入,该
系统由x = -1 和y = 2 精确求解。
这是用 SICStus 重新检查的library(clpq)
:
所以 -1, 2 是确切的解决方案。
精确的配方
这是一个在输入系数中没有舍入问题的重新表述,但解决方案仍然只是 -∞...+∞。因此,微不足道的正确,但不可用。
prolog - 将 CLPR 输出写入控制台
我是Prolog的初学者。我想修改代码以将输出写入控制台。如何将此程序的输出写入控制台?
询问 :-
xsb - 带有 clpr 约束的 XSB Prolog 元解释器问题
我在我的 Mac (El Capitan 10.11.2) 上运行 XSB Prolog:XSB 版本 3.6。(Gazpatcho) 2015 年 4 月 22 日 [i386-apple-darwin15.2.0 64 位;模式:最优;引擎:slg-wam;调度:本地] [构建日期:2016-01-17]
我正在使用 clpr 包并想编写一个小元解释器:
但是,try({X=1+2})
不起作用——它与第四个子句不匹配,并下降到第五个子句。
知道为什么吗?
recursion - 使用 Prolog 在 CLP(R) 中编写递归函数的正确方法
我对 CLP 在 Prolog 中的工作方式感到非常困惑。不仅我发现很难看到好处(我确实在特定情况下看到了它,但发现很难概括这些好处),而且更重要的是,我几乎无法弥补如何正确编写递归谓词。以下哪项是 CLP(R) 方式中的正确形式?
或者
换句话说,我不确定何时应该在约束之外编写代码。对我来说,第一种情况似乎更合乎逻辑,因为PrevN
和NewF
属于约束。但如果这是真的,我很想知道在哪些情况下在递归函数的约束之外使用谓词是有用的。
random - 将 Prolog 和 CLP(R) 用于约束系统
我正在寻找使用 Prolog 生成满足约束系统的随机向量。
例如,我们的用户可能会在运行时向我们的软件提供以下信息:
给定一个向量<x1, x2, x3, ... x30>
,我们可能有两个约束:
我想做的是生成一个大致遵循以下形式的 Prolog 程序:
这将在 30 维空间中输出一个均匀随机的向量。
这对 Prolog 可行吗?
还有消耗该输出的问题。我想做的是有任何调用来next()
重新生成一个新的向量。具体来说,我需要避免重新编译,因为我希望能够每秒生成大约 10,000 个这些向量。我能达到这种性能水平吗?
我希望在我们软件的其余部分运行的 JVM 上使用嵌入式(进程内)SWI-Prolog 实例。那就足够了吗?
optimization - minimize/1 没有重新排列解决方案的顺序
对于哥伦比亚的 Observatorio Fiscal[1],我正在编写一个简单的税收最小化问题,使用 CLP(R)(在 SWI-Prolog 中)。我想先使用最小化/1 找到最小的解决方案。相反,它首先列出更大的解决方案。这是代码:
这是交互式会话的样子:
如果我将“最小化”这个词切换为“最大化”,它的行为是相同的。如果我不包含最小化或最大化子句,它不会寻找第三种解决方案,但除此之外它的行为相同:
[1] Observatorio Fiscal 是一个新组织,旨在模拟哥伦比亚经济,以预测法律变化的影响,类似于美国国会预算办公室或税收政策中心所做的事情。
vector - How to interface Prolog CLP(R) with real vectors?
I'm using Prolog to solve simple geometrical equations.
For example, I can define all points p3
on a line passing trough two points p1
and p2
as:
And then a predicate like line((0, 0, 0), (1, 1, 1), _, (2, 2, 2))
is true.
But what I'd really want is to write down something like this:
Where P1, P2, and P3 are real vectors.
What's the best way of arriving at something similar? The best I found so far is to rewrite my own add
, subtract
and multiply
predicates, but that's not as conveniant.