prolog - 在 Prolog 中使用逻辑仿函数

标签 prolog logic semantics ontology

我想要逻辑连接词,例如
not(X), conj(X, Y), some(Y, K).我希望能够迭代它们。

例如,我希望能够将 not(some(Y, K)) 转换为 all(Y, not(K))。

我不希望它们具有任何特定含义,我只想以这种方式处理逻辑公式。

做到这一点的最佳方法是什么?

这是我的代码中的实际行:

nnf(not(all(X, Y)) ,some(Z, W))     :- nnf(X, Z), nnf(not(Y), W).

所以如果我给它 not(all(a,b))我想拿回一些(a,不是(b)),但是我不知道如何让 Prolog 治疗 not/1all/2以这样的方式。

最佳答案

这里没有独特的最佳方式。这在一定程度上取决于您的特定用途。

您的问题基本上简化为:如何在您的设置中表示变量。按基本术语?那是一个(Prolog)变量自由表示。或者直接通过 Prolog 变量。

我宁愿先尝试地面表示。也许试试 v(Nr) Nr 是一个整数。比较频繁的是'$VAR'(Nr)这也得到了 writeq/1 的认可.但我会坚持使用 v/1在一开始的时候。

关于prolog - 在 Prolog 中使用逻辑仿函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8272973/

相关文章:

Prolog:为什么我最终会得到带有匿名变量的列表

prolog - 如何在 Prolog 中找到 map 上两点之间的公共(public)车站?

swift - 从字典和最佳实践中更新变量值

JavaScript 游戏和安全

java - 是否有任何工具可以从 Java 中的英文文本或文章中提取关键字?

prolog - Prolog 谓词参数中实例化模式指示符的含义

prolog - 如何证明一个子句可以从 Prolog 中的一组子句导出?

c# - 我想要一种让每个人都有平等机会的方法我如何在 C# 中做到这一点?

HTML5 - <article> 标签的正确用法

rdf - CONSTRUCT 子句的实际使用(和重用)