prolog - 在 Prolog 中定义谓词作为 (=)/2(统一)的替代

标签 prolog

对于我的编程类(class)作业,我必须在不使用任何预定义谓词(不包括 ;)的情况下编写一些 Prolog 代码,但没有办法使用=,因为我必须检查变量 A 是否等于(可以识别)某个 foo(B, C)

由于这是不允许的,所以我想实现我自己的谓词 myUnification/2,它的行为本质上应该是相同的,但我不知道如何去做。我尝试查看 SWI-Prolog 文档寻求帮助,但是 it only explains what the predicate does, not how it actually works internally .

最佳答案

它就在文档中:-D

=(Term, Term).

要使用“unify”而不是“=”,请定义:

unify(A, A).

你现在可以像这样施展魔法:

?- unify(X, foo(a, b)).
X = foo(a, b).

关于prolog - 在 Prolog 中定义谓词作为 (=)/2(统一)的替代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75219379/

相关文章:

prolog - 当我将相等比较放在开头时,为什么序言没有给出所有结果?

prolog - 在序言中组合两个列表

haskell - Haskell 中的模式匹配等效变量,例如 Prolog

prolog - 序言中的累加器问题

recursion - 在 prolog 中交换二叉树

prolog - 使用额外参数定义 Prolog DCG

prolog - 结构(差异列表)序言

file - 如何在Prolog中包含.pl文件?

Prolog 求两个整数之间的整数之和

list - 如何在 Prolog 中实现我自己的列表?