在Racket

时间:2017-04-04 22:48:15

标签: recursion racket translate digits

我正在尝试编写一个程序,将数字列表(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)我得到'(一。三)。发生了什么事?

1 个答案:

答案 0 :(得分:0)

你没有使用递归,你只需要调用translate函数两次而不是调用translate-digits并使用递归。

注意细微差别:

(define (translate-digits aList)
 (cond [(empty? aList) '()]
       [else (cons (translate (first aList))
                   (translate-digits (rest aList)))]))

通过调用列表的translate-digits上的rest,您可以走到空列表中,然后返回一个空列表退出。