1

我正在设计一个函数,它使用一个自然数(如 0、1、2、...等)并使用符号 I 返回以一元(基数 1)表示它的字符串,并在一元后以十进制显示数字形式。所以如果我输入 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)"]))

但是有没有更简单的方法来解决这个问题?我一直在阅读有关数字->字符串、字符串附加和复制的信息,但我不确定从哪里开始。

4

2 回答 2

0

确实有一种更简单的方法 - 使用循环来生成适当数量的"I"字符。想一想,如果cequals会发生什么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))))
于 2013-01-20T17:20:45.320 回答
0

这适用于初级学生语言。

下面产生一元部分。

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

之后附加计数器(您确定括号是在输出中吗?)。

于 2013-01-20T17:54:52.143 回答