2011-03-18 16 views
0

我試圖讓Prolog實例化一個公鑰/私鑰對的相反鍵的變量,如果這是可能的話。prolog:使用函數式返回值的內置或其他方法

所以我主要有:

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

keyPair(k_c,k_c-1). 

鑑於序言的本質,我不認爲你可以管理像

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

定義

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

然後用

inverseOf(Init_2, Init_3). 
+0

謝謝,我似乎忽略了那些森林,因爲那些樹。 – danowar 2011-03-19 11:19:20

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中你不能說Y = f(X)這樣的東西(實際上你可以,但是如果你來自C/Java/Python/etc背景,它不會像你期望的那樣做)

爲了實現功能在序言Y = f(X),你會做這樣的事情

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

並調用它像這樣

f(3, Y).

Y就應該評估爲價值4

相關問題