2013-01-20 61 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)))])) 

追加計數器之後(你肯定括號 ,就是要在輸出?)。

相關問題