Scheme 方案递归从列表的开头开始,在它之后';它是空的
对于一个学校项目,我必须考虑我自己的加密方法,并且必须在scheme中创建一个程序,该程序可以使用该方法进行加密和解密。我对这个计划还不熟悉,所以我需要一些帮助 正如你在我的代码中看到的,我正在使用递归,你可以看到,我正在将字母转换成数字,然后我将字母向上移动了键中所述的次数。然后我想把它们转换成字母。所以我的问题是,我想在密钥为空时从头开始,但我真的不知道怎么做 如果你想帮我更多的忙,我想声明第二个键,它由数字组成。该键决定第一个键何时从头开始。 我希望你能帮助我Scheme 方案递归从列表的开头开始,在它之后';它是空的,scheme,racket,Scheme,Racket,对于一个学校项目,我必须考虑我自己的加密方法,并且必须在scheme中创建一个程序,该程序可以使用该方法进行加密和解密。我对这个计划还不熟悉,所以我需要一些帮助 正如你在我的代码中看到的,我正在使用递归,你可以看到,我正在将字母转换成数字,然后我将字母向上移动了键中所述的次数。然后我想把它们转换成字母。所以我的问题是,我想在密钥为空时从头开始,但我真的不知道怎么做 如果你想帮我更多的忙,我想声明第二个键,它由数字组成。该键决定第一个键何时从头开始。 我希望你能帮助我 (define (codie
(define (codieren str ausgabe key1)
(verschluesseln (umwandeln (string->list str) ausgabe) key1 '()))
(define (umwandeln liste ausgabe)
(cond
[(null? liste) ausgabe]
[else (umwandeln (rest liste)
(append ausgabe (list (char->integer (first liste)))))]))
(define (verschluesseln zahlenListe key1 ausgabe)
(cond
[(null? zahlenListe) ausgabe]
[else (verschluesseln (rest zahlenListe) (rest key1)
(append ausgabe (list (+ (first zahlenListe) (first key1)))))]))
我已经重命名了一些变量:) 。。。并添加了一些签名和目的声明。是用Racket(初学学生语言)进行的测试 您可以构建类似的解码器功能(反向工作): 然后测试通过密钥编码和解码的内容是否返回相同的内容:
;; String [Listof Number] -> String
;; encodes and decodes a str by key
(define (encode-decode-identity str key)
(decode (encode str '() key) '() key))
(check-expect (encode-decode-identity "abc" (list 1 1 1)) "abc")
(check-expect (encode-decode-identity "Gödel" (list 3 0 1 -9 7)) "Gödel")
看看键是如何在两个函数中使用的
请注意,我们的编码信息是一个[Listof Number]
。可以将其转换为字符串:
;; [Listof Number] String -> String
;; converts an encoding `code` to its string form
(define (code-to-string code output)
(cond [(null? code) output]
[else (code-to-string (rest code)
(string-append output (int->string (first code))))]))
(check-expect (code-to-string (list 98 99 100) "") "bcd")
(check-expect (code-to-string (encode "Church" '() (list 4 2 3 -5 0 9)) "") "Gjxmcq")
。。。然后可以将其用于多次编码(如您所问):
编码的多个应用程序被组合起来,而不是“密钥从头开始”
;; [Listof Number] [Listof Number] [Listof Number] -> String
(define (decode code output key1)
(list->string (convert-back (decrypt code key1 output) '())))
(check-expect (decode (list 98 99 100) '() (list 1 1 1)) "abc")
;; [Listof Number][Listof Number] [Listof Number] -> [Listof Number]
(define (decrypt numlist key1 output)
(cond
[(null? numlist) output]
[else (decrypt (rest numlist)
(rest key1)
(append output (list (- (first numlist) (first key1)))))]))
(check-expect (decrypt (list 98 99 100) (list 1 1 1) '()) (list 97 98 99))
;; [Listof Number] [Listof Character] -> [Listof Character]
(define (convert-back liste output)
(cond
[(null? liste) output]
[else (convert-back (rest liste)
(append output (list (integer->char (first liste)))))]))
(check-expect (convert-back (list 97 98 99) '()) (list #\a #\b #\c))
;; String [Listof Number] -> String
;; encodes and decodes a str by key
(define (encode-decode-identity str key)
(decode (encode str '() key) '() key))
(check-expect (encode-decode-identity "abc" (list 1 1 1)) "abc")
(check-expect (encode-decode-identity "Gödel" (list 3 0 1 -9 7)) "Gödel")
;; [Listof Number] String -> String
;; converts an encoding `code` to its string form
(define (code-to-string code output)
(cond [(null? code) output]
[else (code-to-string (rest code)
(string-append output (int->string (first code))))]))
(check-expect (code-to-string (list 98 99 100) "") "bcd")
(check-expect (code-to-string (encode "Church" '() (list 4 2 3 -5 0 9)) "") "Gjxmcq")
;; Number String [Listof Number] -> String
;; encodes str n times using key
(define (encode-n-times n str key)
(cond [(= n 0) str]
[else (encode-n-times (- n 1) (code-to-string (encode str '() key) "") key)]))
(check-expect (encode-n-times 3 "abc" (list 1 1 1)) "def")