我想要逻辑连接词,例如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/1
和 all/2
以这样的方式。
最佳答案
这里没有独特的最佳方式。这在一定程度上取决于您的特定用途。
您的问题基本上简化为:如何在您的设置中表示变量。按基本术语?那是一个(Prolog)变量自由表示。或者直接通过 Prolog 变量。
我宁愿先尝试地面表示。也许试试 v(Nr)
Nr 是一个整数。比较频繁的是'$VAR'(Nr)
这也得到了 writeq/1
的认可.但我会坚持使用 v/1
在一开始的时候。
关于prolog - 在 Prolog 中使用逻辑仿函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8272973/