У меня был вопрос о программе, которую я пытался запустить.
Encrypt принимает сообщение, открытый ключ и закрытый ключ и возвращает сообщение с замененными буквами из сообщения в открытом ключе на буквы из закрытого ключа.
Например, (encrypt "abcd" "abcd" "efgh") должно возвращать "efgh"
и (шифровать «abcl», «abcd», «efgh») должен возвращать «efgl» (письмо из сообщения, которого не было в открытом ключе, останется прежним).
Я написал несколько вспомогательных программ для решения этой проблемы, но я продолжаю получать сообщение об ошибке «исключение в машине, __ не пара», когда я пытаюсь его запустить ... но я не уверен, что не так. Если у кого-нибудь есть указатели, дайте мне знать. Спасибо!
(define encrypt
(lambda (message public-key private-key)
(cond
[(list->string (encrypt-helper (string->list message)
(string->list public-key) (string->list private-key)))])))
(define encrypt-helper
(lambda (msg-ls public-ls private-ls)
(cond
[(null? public-ls) '()]
[(null? private-ls) '()]
[(and (null? public-ls) (null? private-ls)) msg-ls]
[else (cons (encrypt-key (car msg-ls) (car public-ls) (car private-ls))
(encrypt-helper (cdr msg-ls) (cdr public-ls) (cdr private-ls)))])))
;should encrypt all letters in msg-ls. not working correctly
(define encrypt-key
(lambda (char pub-key priv-key)
(cond
[(null? pub-key) char]
[(equal? char (car pub-key)) (car priv-key)]
[else (encrypt-key char (cdr pub-key) (cdr priv-key))])))
;encrypts just one letter, ex: (encrypt-key 'a '(a) '(b)) => b
;works correctly