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