2011-03-04 94 views
0

编辑:更改某些字母串

(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)))))]))) 

回答

1

现在假设我们用一个字符串“test”测试你的程序(通过手动步进)。我们看到的第一个错误是您没有else的情况。其次,您会注意到,当您将(car (string->list string))'e进行比较时,您将始终得到错误信息,因为当字符串分解时,它将被分解为字符(#\e)而不是符号。

我会建议您在测试代码时注意您不断收到的错误(错误类型是什么?在您的问题中您没有提及它们;方案通常对错误消息提供很多信息)以及尝试解决它们中的每一个。举例来说,如果你得到

string->list : expects argument of type <string>; given myinput 

那么你知道,有一些错误的myinput你是给string->list类型。这种类型的错误会在您的代码中出现几次。当我遇到递归输入类型问题时,我喜欢使用的一种方法是使用帮助函数/包装函数(提示)。

此外,测试递归程序的一个好方法是手动运行它们(例如,使用字符串“test”,如开头所述),然后查看卡住的位置并相应地修复程序。

我希望这会帮助您设置正确的方向,并让我知道您是否需要更多指针。

+0

感谢您的指点。在上面的代码中,我一直收到错误“除了在汽车中,__不是一对”,我不太了解,因为包含这些字符的列表可以分解为汽车和CDR。我做了一些更正,现在我的代码崩溃了我的笔记本电脑:P我不知道的主要原因是我如何可以同时检查所有3个字符。 – mdegges 2011-03-05 00:48:49

+0

对于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

+0

至于错误,这是因为你有一个语法错误 (等于?(字符串 - >列表(汽车字符串))的) 应该是 (等于?(汽车(字符串 - >列表字符串))的) - 对于第三种情况,第一种情况也是一样 - ,因为汽车将列表作为参数。 – quarkdown27 2011-03-05 03:51:16