Шифрование строк с использованием функциональной карты высокого порядка

Я написал следующий код шифрования строки. Но я хочу иметь возможность брать ключ шифрования с клавиатуры, используя (чтение) вместо использования жестко закодированного значения. Но я не могу этого сделать, потому что карта принимает список в качестве аргумента.

#lang racket

(define character-encryption
  (lambda (ch)
    (if (char-alphabetic? ch)
        (character-rotation ch 3) 
        ch))) ; non-letter will not be encrypted.

(define character-rotation
  (lambda (ch num)
    (integer->char (+ (char->integer ch) num)))) ; key=3

(define string-encryption
  (lambda (str) 
    (list->string (map character-encryption (string->list str)))))

ОБНОВИТЬ

> (string-encryption (read))
"foo bar"                        ; <- entered
"irr edu"                        ; output

ОБНОВИТЬ

#lang racket

(define character-encryption
  (lambda (key)
    (lambda (ch)
      (if (char-alphabetic? ch)
          (character-rotation ch key) 
          ch)))) ; non-letter will not be encrypted.

(define character-rotation
  (lambda (ch num)
    (integer->char (+ (char->integer ch) num)))) ; key=3 (I want to read this number)


(define string-encryption
  (lambda (key str) 
    (list->string (map (character-encryption key) (string->list str)))))

person Ahsan Ali    schedule 19.11.2016    source источник
comment
Я хочу прочитать ключ шифрования. В приведенном выше коде это жестко закодировано как 3. Я не хочу читать строку.   -  person Ahsan Ali    schedule 19.11.2016
comment
как (строковое шифрование foo bar (чтение))   -  person Ahsan Ali    schedule 19.11.2016
comment
Большое спасибо. Я впервые использую stackoverflow. Вы действительно помогли мне. Спасибо, обновленные процедуры сработали.   -  person Ahsan Ali    schedule 19.11.2016
comment
Закон Шнайера: любой, от самого невежественного любителя до лучший криптограф, может создать алгоритм, который сам не сможет взломать.   -  person zaph    schedule 19.11.2016


Ответы (1)


Используйте read-line для чтения строки. Результатом является строка.

Подробнее читайте здесь: Документы в строке чтения

person soegaard    schedule 19.11.2016
comment
Затем введите строки как foo bar - person soegaard; 19.11.2016
comment
Мне просто нужно прочитать ключ шифрования в качестве ввода, используя чтение, а не строку. Но я не могу передать его процедуре шифрования символов, потому что она вызывается с использованием карты. - person Ahsan Ali; 19.11.2016
comment
Ах, это номер 3, который вы хотите параметризовать. См. обновленное предложение. - person soegaard; 19.11.2016