我正在尝试编写一个程序,将数字列表(1,2,3 ......等)转换为相应单词列表(一,二,三......)。我写了一个帮助函数来翻译各个数字。它看起来像这样:
(define (translate num)
(cond [(= num 1) 'One]
[(= num 2) 'Two]
[(= num 3) 'Three]
[(= num 4) 'Four]
[(= num 5) 'Five]
[(= num 6) 'Six]
[(= num 7) 'Seven]
[(= num 8) 'Eight]
[(= num 9) 'Nine]
[(= num 0) 'Zero]))
该功能有效。我在'(1 2 3)之类的列表中调用的函数如下所示:
(define (translate-digits aList)
(cond [(empty? aList) '()]
[else (cons (translate (first aList))
(translate (first (rest aList))))] ))
它不起作用。我认为这与利弊有关。但当我测试输入'(1 3 5 7)我得到'(一。三)。发生了什么事?
答案 0 :(得分:0)
你没有使用递归,你只需要调用translate
函数两次而不是调用translate-digits
并使用递归。
注意细微差别:
(define (translate-digits aList)
(cond [(empty? aList) '()]
[else (cons (translate (first aList))
(translate-digits (rest aList)))]))
通过调用列表的translate-digits
上的rest
,您可以走到空列表中,然后返回一个空列表退出。