问题标签 [prolog-metainterpreter]

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.

0 投票
1 回答
197 浏览

prolog - 在 prolog 中编译元程序时出错

我正在尝试在 ECLiPSe Prolog 中实现一个元程序,这是我编写的代码 -

现在,当我使用 查询时sol(go(X)).,我得到了错误accessing a procedure defined in another module in clause(X is 5, _292)并且它中止了。我尝试清除所有顶级模块并重新打开 ECLiPSe 然后运行,但仍然是同样的错误。

可能是什么原因?

谢谢!

0 投票
1 回答
581 浏览

prolog - Prolog 编程语言和证明树

回想一下这个证明元循环

假设解释器的第三条规则发生变化,而解释器的其他规则不变,如下:

考虑将在两个版本中为某些查询创建的证明树。只能在一个版本中实现任何变量替换吗?解释。任何真叶可以移动到最左边的无限分支的另一侧吗?解释。如果答案是肯定的,请在这两个问题中举例说明。这对证明有何影响?

请帮我 !发送

0 投票
3 回答
797 浏览

prolog - Refactoring tangled, circular rules in Prolog

Right up front: This is not a homework exercise. I’m trying to learn Prolog and this is just a problem that happens to need solving and for which Prolog is a perfect fit.

I have a bunch of family relations which comprise my facts:

The data that I have are incomplete, many links of the family mesh are missing. My facts come from an external source, I can only supply the rules. For a given person, I might have male, brother and cousin, for another mother and wife. In the worst case, I barely know cousin, but have enough other facts to be able to infer who is, say, the uncle, therefore that the person might be that brother mentioned elsewhere, hence is male. And so forth.

There’s no way in which I can influence which facts there will be. That’s the whole point of the problem: If the facts were complete, I wouldn’t need to do this. I could do the guesswork by hand, but that’s what a computer is for, if I can find a way of expressing it. The goal is therefore to fill the missing links as good as possible, especially with regard to the ‘indirect’ relations around uncle, aunt, nephew, niece and especially cousin, which are notoriously incomplete.

I could write my rules naïvely like this:

I am rather sure that I am trying to solve the problem in a fundamentally wrong way, as I see no way of breaking the circular reasoning. And without breaking the circles, any Prolog program that I’ll devise for this will degenerate into endless recursions.

So what could I do to break this tangle down into something that can be solved?

0 投票
1 回答
732 浏览

prolog - Prolog 解除绑定绑定变量

我有这个追踪元解释器。它是为 swi-prolog 编写的。

它工作正常,除了一件事外它应该如何工作。当我Query在函数中有变量时just_do_it(In, Out, Query),输出是绑定变量。有没有办法在跟踪的进一步步骤中取消绑定变量,以便我可以看到它何时被绑定,何时不被绑定?

示例输出:

我希望拥有的示例输出:

0 投票
1 回答
1191 浏览

prolog - 在跟踪元解释器序言中实现剪切

我有这个跟踪元解释器,从上一个问题Prolog unbind bound variable改变。

我不明白如何解释cut。感谢用户@false,他告诉我cut 的实现很糟糕,我的问题是,我应该如何在这个元解释器中实现cut?

0 投票
2 回答
112 浏览

prolog - 处理复杂的序言循环

我正在使用 Prolog 在我的项目中编码一些相当复杂的规则。有很多递归,包括相互递归。部分规则如下所示:

pred1和之间有一个相当明显的无限循环pred2。不幸的是,这些谓词之间的交互非常复杂且难以隔离。在这种情况下,我可以通过传递已传递给的对象列表来消除无限循环pred1,但这非常笨拙!事实上,它在很大程度上违背了在这个应用程序中使用 Prolog 的目的。

如何让 Prolog 避免无限循环?例如,如果在证明过程中pred1(foo)试图证明它pred1(foo)是一个子目标,则失败并回溯。

是否可以使用元解释器来做到这一点?

0 投票
3 回答
238 浏览

prolog - 合并生成器结果并将结果写入流

目前我可以生成表达式树。

其中 N 是树的节点数。

我也可以独立生成序列号。

我还可以生成和输出表达式,但不能使用正确的序列号


请注意,序列号都是0000001.

这是生成选择点,所以我修改它使用forall

这仍然是错误的。


我寻求的输出是

其中每个序列号都是唯一的,并且从0or开始是连续的,1并且可以写入文件。对于此示例,流设置user_output为简化问题。

如果我将序列号生成器添加到组合中

序列号现在是正确的,但是永远不会生成新的表达式,因为序列号生成器正在使用选择点来生成下一个序列号,因此谓词sequence_number不会回溯到generate_expression谓词以获取新表达式。

那么,我可以使用两个连续依赖回溯的生成器吗?如果是这样,怎么做?

补充

这与我之前关于树生成器的问题有关。
我知道这应该使用来完成,并且应该更改数据结构,但是当我试图理解这一点时,以这种方式看待它更容易理解。

相关的 SO 问题

0 投票
1 回答
151 浏览

prolog - 无权访问 private_procedure `true/0'

我正在尝试将香草元解释器与“if”和“and”一起使用。

这是我的代码:-

当两个条件都为真时。

当第一个条件为假时。

但是当第二个条件为假时,它返回错误没有权限访问 private_procedure `true/0'

请帮忙,谢谢。