Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scheme 使用十进制数并以一元数形式返回的函数_Scheme_Racket - Fatal编程技术网

Scheme 使用十进制数并以一元数形式返回的函数

Scheme 使用十进制数并以一元数形式返回的函数,scheme,racket,Scheme,Racket,我正在设计一个函数,它使用一个自然数,如0、1、2……等,并使用符号I返回以一元基数1表示的字符串,同时在一元形式后以十进制形式显示数字。如果我输入2,我会得到II2。5,我会得到II5 我是这样做的: (define (number->unary c ) (cond [(= c 1 ) "I (1)" ] [(= c 2 ) "II (2)" ] [(= c 3) "III (3)"] [(= c 4) "

我正在设计一个函数,它使用一个自然数,如0、1、2……等,并使用符号I返回以一元基数1表示的字符串,同时在一元形式后以十进制形式显示数字。如果我输入2,我会得到II2。5,我会得到II5

我是这样做的:

  (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)"]))

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

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

这里有一种可能的方法,使用一个助手过程来实现一个名为loop的递归过程的迭代:


这适用于初级学生语言

下面生成一元部分

(define (number->unary c )
  (cond
    [(= c 0) ""]
    [else    (string-append "I" (number->unary (- c 1)))]))
后面追加计数器是否确定括号
是否要在输出中?

@Josh您使用的教学语言是什么?至少,你能使用递归过程吗?我使用的是初学者。下面说它只要求函数体有一个表达式,但找到了一个额外的部分。
(define (number->unary c )
  (cond
    [(= c 0) ""]
    [else    (string-append "I" (number->unary (- c 1)))]))