0

私は以下に「手続きを定義する leet-speak は文字列を受け取り、すべての s を 5 に、すべての e を 3 に、すべての l を 1 に、すべての o を 0 に変更した結果を返す」というプログラムを書きました。これを行います。単純にstring->listmap、およびを使用してlist->stringください。」

私が得たエラーは次のとおりです。

 ~ (leet-speak "leet speak neat speak")
 Exception: attempt to apply non-procedure (1 3 3 #\t #\space 5 ...)

の私の定義は次のleet-speakとおりです。

(define leet-speak
  (lambda (y)
    (list->string 
      ((map 
         (lambda (x)
           (cond
             [(eq? #\l x) 1]
             [(eq? #\s x) 5]
             [(eq? #\o x) 0]
             [(eq? #\e x) 3]
             [else x])
           ) (string->list y )))))

どこに問題があるのか​​本当にわかりません。

4

1 に答える 1

2

を囲む括弧が多すぎますmap。の前に括弧が1つだけになるように余分なものを削除すると、準備完了mapです。

また、数値自体ではなく、数値に対応する文字を返すcond必要があります。また、 の代わりに を使用することを検討してください。casecond

以上で、次のようになります。

(define (leet-speak str)
  (list->string 
   (map (lambda (x)
          (case x
            [(#\l) #\1]
            [(#\s) #\5]
            [(#\o) #\0]
            [(#\e) #\3]
            [else x]))
        (string->list str))))
于 2013-04-24T06:16:18.807 に答える