2016-11-19 50 views
0

我写了下面的字符串加密代码。但我希望能够使用(读取)而不是使用硬编码值从键盘获取加密密钥。但我无法做到这一点,因为地图将列表作为参数。使用高阶函数映射的字符串加密

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

UPDATE

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

UPDATE

#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))))) 
+0

我想要阅读的加密密钥。在上面的代码中,它被硬编码为3.我不想读取字符串。 –

+0

like(string-encryption“foo bar”(read)) –

+0

非常感谢。我第一次使用stackoverflow。你真的帮助我。感谢更新过的程序。 –

回答

1

使用read-line读取线。结果是一个字符串。

更多在这里阅读: Docs on read-line

+0

我必须使用简单的读取 –

+0

然后输入字符串作为“富酒吧” – soegaard

+0

并且还使用地图 –