Симметричное шифрование Prolog

#prolog

#prolog

Вопрос:

Итак, я новичок в prolog. Мне нужно создать предикат xor( Text, Key,-Cipher). , который я могу предположить, Text и Key иметь ту же длину. Text содержит список из 0 и 1, и так же Key . Мне нужно выполнить оператор XOR для каждого элемента списка Text Key и записать выходные данные в -Cipher список.

 xor( Plaintext, Key,-Cipher) :-
 / ** TODO **/

xor_check(0,0,0).
xor_check(0,1,1).
xor_check(1,0,1).
xor_check(1,1,0).
  

Я сделал xor_check для всех возможных результатов, но не уверен, как передать ему элементы моего списка.

Ответ №1:

Вы можете легко обрабатывать списки в Prolog с помощью рекурсии.

Поскольку вы предполагаете, что открытый текст и ключ имеют одинаковую длину, вы можете обработать его следующим образом:

 xor([], [], []).
xor([P|Plaintext], [K|Key], [C|Cipher]) :-
    xor_check(P, K, C),
    xor(Plaintext, Key, Cipher).