пролог: встроенный или другой метод для использования возвращаемых функций - PullRequest
0 голосов
/ 18 марта 2011

Я пытаюсь позволить 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 ]

2 голосов
/ 18 марта 2011

Определите

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

, а затем используйте

inverseOf(Init_2, Init_3).
1 голос
/ 18 марта 2011

Что-то вроде этого определено:

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).

В сторону ...

Пролог не имеет функций; вы не можете сказать что-то вроде Y = f(X) в Прологе (на самом деле вы можете, но он не делает то, что вы ожидали, если вы пришли из C / Java / Python / и т.д. фона.

Чтобы реализовать функциональность Y = f(X) в Прологе, вы должны сделать что-то вроде этого

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

и вызвать его так

f(3, Y).

Y оценил бы до значения 4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...