Преобразование процедуры в строку .... как? - PullRequest
0 голосов
/ 17 мая 2019

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

Спасибо всем, кто отвечает.

(define schlüsselauswahl 
  '("fkaloruksnkdwio"
    "qpeüäasletajdns"
    "iwodöakdjsmxbeo"
    "wlpskamsjuerutz"
    "mvbsiaöeäfzenxk"
    "djqpwöymdöäakwx"
    "vjnwsanaöwpfqtz"
    "ksmflwtzwksnswf"
    "pefäösaisuenfmx"
    "iawöaüäwirztmyb"))

(define (schlüssel)
  (list-ref schlüsselauswahl (random (length schlüsselauswahl))))

(define (verschlüsselung klartext)
  (start (string->list klartext) (string->list schlüssel) '()))

(define (start klartext schlüssel ausgabe)
  (cond
    ((null? klartext) (list->string ausgabe))
    ((null? schlüssel) (start klartext ausgabe))
    (else
     (start
      (rest klartext)
      (rest schlüssel)
      (append ausgabe 
              (list
               (integer->char
                (+ (modulo (+ (- (char->integer (first schlüssel)) 97)
                              (- (char->integer (first klartext)) 97))
                           26)
                   97))))))))

1 Ответ

0 голосов
/ 18 мая 2019

Ваша проблема здесь: (string->list schlüssel).

Вы не вызываете процедуру schlüssel, даже если вы, безусловно, хотите передать возвращаемое значение в string->list, а не саму процедуру. Вам нужно написать (string->list (schlüssel)).

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

...