有没有办法“递归地重新定义”(不知道技术术语)序言谓词?
考虑这些谓词:
f(X,Y,A):-A is Y xor X.
arity(f,2).
现在我想使用以下定义自动创建 2 个新谓词 f1/2 和 f2/1:
f1(Y,A):-f(1,Y,A).
f2(A):-f1(1,A).
所以谓词应该得到一个(二进制)函数作为输入,并通过从左到右填充函数的参数(通过arity定义的#)来创建新的谓词。
这可能吗?我尝试了 univ 运算符和 call() 的各种组合,但没有成功。
有谁知道如何做到这一点?任何帮助将不胜感激。
编辑:更高数量的示例:
f(W,X,Y,Z,A):-A is Y xor X xor W xor Z.
arity(f,4).
-->
f1(X,Y,Z,A):-f(1,X,Y,Z,A).
f2(Y,Z,A):-f1(1,Y,Z,A).
f3(Z,A):-f2(1,Z,A).
f4(A):-f3(1,A).
因为我只对所有参数设置为 1 的 f (A) 的返回值感兴趣,所以可能有更简单的方法来做到这一点......无论如何,感谢您的帮助!