有没有一个与numbervars/3相反的Prolog系统?

问题描述 投票:0回答:1

谓词 numbervars/3 本身并不是 ISO 的一部分 核心标准,但是ISO核心标准已经有一点了 支持

numbervars/3
可以做什么,因为打印句柄

numbervars/3 可以产生的

'$VAR'/1
化合物:

?- T = f('$VAR'(0), '$VAR'(1), '$VAR'(0)).
T = f(A, B, A).

?- T = f(X,Y,X), numbervars(T, 0, _).
T = f(A, B, A),
X = A,
Y = B.

我想知道 Prolog 系统是否曾经提供过 numbervars/3 的反向以及这样的反向的名称是什么 会去的。我想反过来也可以:

?- T = f('$VAR'(0), '$VAR'(1), '$VAR'(0)), reverse_numbervars(T, S, L, _).
T = f(A, B, A),
S = f(_0, _1, _0).
L = [_0, _1|_]

或者是否可以从

reverse_numbervars/4
引导 一些现有的谓词没有完全编码。我猜 它可以通过递归遍历第一个参数来编码

并用新变量替换

'$VAR'/1
化合物。

prolog canonicalization
1个回答
0
投票

好的,我看到 SB-Prolog 有 unnumbervars/3:

  • unnumbervars(+Term, +FirstN, ?Copy)
    该谓词是谓词 numbervars/3 的部分逆。它创建 Term 的副本,其中所有形式为 '$VAR'() 的子项(其中不小于 FirstN)均统一替换为变量。具有相同整数的“$VAR”子项将被相同的变量替换。还提供了一个版本 unnumbervars/2,它调用 unnumbervars/3,并将第二个参数设置为 0。

https://www3.cs.stonybrook.edu/~sbprolog/manual2/node6.html

只是它有不同的签名。但这是一个开始!

© www.soinside.com 2019 - 2024. All rights reserved.