编辑:更改某些字母串
(define leet-helper
(lambda (string)
(cond
[(null? (string->list string)) ""]
[(equal? (car string)#\e)
(cons 3 (leet-speak (cdr string)))]
[(equal? (car string) #\s)
(cons 5 (leet-speak (cdr string)))]
[(equal? (car string) #\o)
(cons 0 (leet-speak (cdr string)))]
[else string])))
(define leet-speak
(lambda (string)
(list->string (string->list (leet-speak string)))))
我的工作,需要一个字符串,并与所有的电子公司变成3的返回相同的字符串的问题,所有特殊的变成了5的,和全0变成了0。我发布了迄今为止创建的内容,但是当我尝试测试这个时,我不断收到错误,所以我知道我没有做正确的事情。另外..这个代码有3 单独的条件,但如果给出的字符串是“eso”,我希望所有3个字符都被改变,而不仅仅是'e'。我不知道该怎么做,或者如果我的递归将自己照顾它[?]。任何指针将不胜感激!
(define leet-speak
(lambda (string)
(cond
[(null? (string->list string)) ""]
[(equal? (car (string->list string)) 'e)
(list->string (cons 3 (leet-speak (cdr (string->list string)))))]
[(equal? (string->list (car string)) 's)
(list->string (cons 5 (leet-speak (cdr (string->list string)))))]
[(equal? (string->list (car string)) 'o)
(list->string (cons 0 (leet-speak (cdr (string->list string)))))])))
感谢您的指点。在上面的代码中,我一直收到错误“除了在汽车中,__不是一对”,我不太了解,因为包含这些字符的列表可以分解为汽车和CDR。我做了一些更正,现在我的代码崩溃了我的笔记本电脑:P我不知道的主要原因是我如何可以同时检查所有3个字符。 – mdegges 2011-03-05 00:48:49
对于3个字符,请这样想:您正在浏览一个列表,并且您要检查列表中的每个项目是“好”还是“不好”(e,s,o,然后您替换),直到到达列表的末尾。所以你想要做的是假设你有一个清单(cons s(cons e(cons a empty)))你检查s,将它改为5,保留5,检查e,将其更改为3,保留5 3,检查a,保持a,保持5,3,a,检查空,完成,这样你现在有(缺点5(缺点3(缺一个空)))。这些字符出现的次数或列表的长度都不重要。 – quarkdown27 2011-03-05 03:42:16
至于错误,这是因为你有一个语法错误 (等于?(字符串 - >列表(汽车字符串))的) 应该是 (等于?(汽车(字符串 - >列表字符串))的) - 对于第三种情况,第一种情况也是一样 - ,因为汽车将列表作为参数。 – quarkdown27 2011-03-05 03:51:16