我试图让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).
有什么想法吗?
答案 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。