мы можем написать правила для криптографической функции - PullRequest
1 голос
/ 14 марта 2011

Можем ли мы написать криптографическую функцию как правило в прологе, т. Е.

C = enc(K, M).
M = dec(K, C).

Я не хочу низкоуровневых деталей, но хочу написать функтор, который предоставит мне эту функциональность.Если это невозможно в прологе, то кто-нибудь может объяснить мне, почему по этой причине пролог не поддерживает такого рода функции.

Ответы [ 2 ]

4 голосов
/ 15 марта 2011

В стандарте ISO Prolog, я не верю, что вы можете, но SWI-Prolog имеет расширение , которое позволяет это. Если вы определяете предикаты

enc(K, M, Result) :- % whatever
dev(K, C, Result) :- % whatever

, которые возвращают результат в третьем аргументе, вы можете сказать

:- arithmetic_function(enc/2).
:- arithmetic_function(dec/2).

и используйте те с

C is enc(K, M).

и т.д.. Вы не можете сделать это с =, потому что в Прологе это имеет особое значение: объединение переменной C с термином (структура данных) enc(K,M).

0 голосов
/ 14 марта 2011

Я ничего не знаю о функторах, и пролог о них тоже не знал.Вы можете использовать только предикаты - факты, соединяющие некоторые переменные.

Например,

encode(+Key, +Message, -CodeMessage)/3
decode(+Key, +CodeMessage, -OriginalMessage)/3

Это означает, что только если вы знаете ключ и сообщение, вы можете получить код этого сообщения с кодировкой./ 3 предикат.И только если вы знаете ключ и код сообщения, вы можете получить исходное сообщение с предикатом decode / 3.

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