需要一点帮助这个计划“leet-speak”

时间:2013-04-24 06:10:54

标签: recursion map scheme

我在下面编写了一个程序,用于“定义一个程序leet-speak接受一个字符串并返回将所有s变为五,所有e变为三,所有l为1,所有o为零的结果。不要写任何这样做的递归代码。只需使用string->listmaplist->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 )))))

我真的无法找出问题所在。

1 个答案:

答案 0 :(得分:2)

map周围有太多括号。删除额外的内容,以便在map之前只有一个括号,你应该好好去。

您的cond还需要返回与该号码对应的字符,而不是号码本身。另外,请考虑使用case代替您拥有的cond

全部,这里看起来如何:

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