编写一个递归函数(string* str n),接受两个参数:字符串x和非负整数n。非负整数归纳定义为:编号::= 0|数字+ 1string*返回一个由n个str组成的字符串。例如:
> (string* "Eugene" 3)
"EugeneEugeneEugene"
您将需要使用Racket的string-append函数。请记住,在非负整数上重复出现时,基数是0。
到目前为止,我已经试过了:
(define string*
(lambda (x n)
(if (null? x)
'""
(if (zero? n)
(string* (string-append x x)
(sub1 n))))))
但是我似乎不知道如何结束递归并打印最后的字符串。
- Null?空列表返回#true。这里不使用列表,所以不需要它。
- 基本情况是
n = 0
,它返回""
(空字符串)。它的谓词是0 ?或(= n 0)
. - 在其他情况下,将字符串和递归调用的结果附加在一起。
(define string*
(lambda (str n)
(if (zero? n) ""
(string-append str
(string* str (sub1 n))))))
> (string* "Eugene" 3)
->"EugeneEugeneEugene"