2013-01-20 39 views
0

我正在设计一个函数,消耗自然数(如0,1,2,....等),并返回代表它在一元(基地1)的字符串,使用符号I并在其一元形式后以十进制显示数字。所以如果我输入2,我会得到"II (2)"。 5,我会得到"IIIII (5)"一个函数,消耗一个小数,并返回一元

我已经做到了这种方式:

(define (number->unary c) 
     (cond 
     [(= c 1) "I (1)" ] 
     [(= c 2) "II (2)" ] 
     [(= c 3) "III (3)"] 
     [(= c 4) "IIII (4)"] 
     [(= c 5) "IIIII (5)"] 
     [(= c 6) "IIIIII (6)"] 
     [(= c 7) "IIIIIII (7)"] 
     [(= c 8) "IIIIIIII (8)"] 
     [(= c 9) "IIIIIIIII (9)"] 
     [(= c 10) "IIIIIIIIII (10)"])) 

但有一个更简单的方法来做到这一点问题呢?我一直在阅读关于数字 - >字符串,字符串附加和复制,但我不知道从哪里开始。

回答

0

确实有一个更简单的方法 - 使用循环来生成适当数量的"I"字符。想想看,如果c等于100会发生什么?你不应该为此创造一百个条件!

这里是一个可能的方式,使用辅助程序与称为loop递归过程实现迭代:

(define (number->unary c) 
    (loop c (string-append " (" (number->string c) ")"))) 

(define (loop num str) 
    (if (zero? num) 
     str 
     (loop (sub1 num) (string-append "I" str)))) 
+0

谢谢,但它说让我们没有被定义。 – Josh

+0

@Josh你使用的是什么教学语言?至少,你可以使用递归过程吗? –

+0

我正在使用初学者。 – Josh

0

这个作品在学生时代开始的语言。

以下产生一元部分。

(define (number->unary c) 
    (cond 
    [(= c 0) ""] 
    [else (string-append "I" (number->unary (- c 1)))])) 

追加计数器之后(你肯定括号 ,就是要在输出?)。

相关问题