2016-11-19 52 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

並且還使用地圖 –