prolog:内置或其他方法来使用类似函数的返回值

时间:2011-03-18 19:42:10

标签: prolog logic gnu

我试图让Prolog将变量实例化为公钥/私钥对的相反键,如果可能的话。

所以我基本上有:

publicKey(k_c).
privateKey(k_c-1).

keyPair(k_c,k_c-1).

考虑到Prolog的性质,我认为你无法管理像

这样的东西
inverseOf(X) :-
(keyPair(X,Y), return(Y),!);(keyPair(Y,X),return(Y),!).

为什么我想/需要这个?

我有一条规则

init(Init_1, Init_2,Init_3)

我想检查类似

的内容
Init_3 == inverseOf(Init_2).

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

定义

inverseOf(X, Y):- keyPair(X,Y), !.
inverseOf(X, Y):- keyPair(Y,X), !.

然后使用

inverseOf(Init_2, Init_3).

答案 1 :(得分:1)

有这样的定义:

keypair(pub1, priv1).
keypair(pub2, priv2).
keypair(pub3, priv3).

keymatch(A, B) :- keypair(A, B).
keymatch(A, B) :- keypair(B, A).

你可以问一些事情:

keymatch(pub1, X).
keymatch(priv2, X).
keymatch(priv3, pub3).

一边......

Prolog没有功能;你不能在Prolog中说出像Y = f(X)这样的东西(实际上你可以,但如果你来自C / Java / Python /等背景,它就没有你所期望的那样。

要在Prolog中实现Y = f(X)的功能,您可以执行类似这样的操作

f(X, Y) :- Y is X + 1.

并像这样调用它

f(3, Y).

Y会评估为值4。