Scheme 将整数转换为列表?

Scheme 将整数转换为列表?,scheme,Scheme,我目前正在尝试将整数转换为列表 例如 1234=>由1、2、3、4组成的列表 我有这个: (string->list (number->string 1234)) 不幸的是,它增加了#和。我猜这是一个数字的字符串表示。如何删除这些符号。因为我需要对整数重新排序,然后打印一个列表 这是上面命令的输出: (#\1#\2#\3#\4)我写了一个函数,每次都用10除以数字: (define (num->list num) (if (< num 10) (list

我目前正在尝试将整数转换为列表

例如

1234=>由1、2、3、4组成的列表

我有这个:

(string->list (number->string 1234))
不幸的是,它增加了#和。我猜这是一个数字的字符串表示。如何删除这些符号。因为我需要对整数重新排序,然后打印一个列表

这是上面命令的输出:


(#\1#\2#\3#\4)

我写了一个函数,每次都用10除以数字:

(define (num->list num)
  (if (< num 10)
      (list num)
      (append (num->list (floor (/ num 10)))
              (list (- num (* 10 (floor (/ num 10))))))))
(定义(num->list num)
(如果(列表(楼层(/num 10)))
(列表(-num(*10)(楼层(/num 10()()())))

显然,这只适用于正整数,但如果需要负整数,则可以很容易地修改它。

我编写了一个函数,每次将数字除以10:

(define (num->list num)
  (if (< num 10)
      (list num)
      (append (num->list (floor (/ num 10)))
              (list (- num (* 10 (floor (/ num 10))))))))
(定义(num->list num)
(如果(列表(楼层(/num 10)))
(列表(-num(*10)(楼层(/num 10()()())))

显然,这只适用于正整数,但如果您需要负整数,它可以很容易地修改。

我不熟悉scheme,但一种代码密集、语言独立的方法是使用一个数学循环来提取每个数字

如果1234是x: 数字_1=x%10 数字2=x%100-数字1 数字3=x%1000-数字2-数字1 等等


您需要在每个站点添加一个检查,这样,如果x<1000,则在第3位之后停止。根据语言的不同,您可以通过各种方式向其添加循环。

我不熟悉scheme,但一种代码更密集、语言独立的方法是使用数学循环来提取每个数字

如果1234是x: 数字_1=x%10 数字2=x%100-数字1 数字3=x%1000-数字2-数字1 等等


您需要在每个站点添加一个检查,这样,如果x<1000,则在第3位之后停止。根据语言的不同,您可以通过各种方式向其添加循环。

当您将字符串转换为列表时,您正在构建一个字符列表,这就是您获得#的原因。#是字符分隔符。;因此,当您完成列表操作时,您可以相当轻松地将其重新转换回字符串。

当您将字符串转换为列表时,您正在构建一个字符列表,这就是为什么您会得到#是字符分隔符。;因此,当您完成列表操作时,可以相当轻松地将其重新转换为字符串。

正如Jonathan所说,#意味着它是一个字符。因此,您必须将字符转换为数字。下面是一个简单的方法

(map (lambda (c) (- (char->integer c) 48))
         (string->list (number->string 1234)))
正如乔纳森所说,#\意味着它是一个角色。因此,您必须将字符转换为数字。下面是一个简单的方法

(map (lambda (c) (- (char->integer c) 48))
         (string->list (number->string 1234)))

我会帮你注意到:

(floor (/ num 10))
与方案中使用商程序相同:

(quotient num)
下面是一个例子:

Welcome to DrRacket, version 6.1.1 [3m].
Language: Pretty Big; memory limit: 128 MB.

> (floor (/ 235 10))
23
> (quotient 235 10)
23
这样我们就可以重写@Kyle函数,如下所示:

(define (numberToList number)
   (if (< number 10) (list number)
       (append (numberToList (quotient number 10))
               (list (- number (* 10 (quotient number 10)))))))
(定义(编号列表编号)
(如果(<编号10)(列表编号)
(附加(数字列表(商编号10))
(列表(-编号(*10(商编号10‘‘‘‘‘‘)’))

我会帮你注意到:

(floor (/ num 10))
与方案中使用商程序相同:

(quotient num)
下面是一个例子:

Welcome to DrRacket, version 6.1.1 [3m].
Language: Pretty Big; memory limit: 128 MB.

> (floor (/ 235 10))
23
> (quotient 235 10)
23
这样我们就可以重写@Kyle函数,如下所示:

(define (numberToList number)
   (if (< number 10) (list number)
       (append (numberToList (quotient number 10))
               (list (- number (* 10 (quotient number 10)))))))
(定义(编号列表编号)
(如果(<编号10)(列表编号)
(附加(数字列表(商编号10))
(列表(-编号(*10(商编号10‘‘‘‘‘‘)’))