将整数转换为List?

时间:2009-01-19 15:22:56

标签: scheme

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

E.g。

1234 =>列表由1,2,3,4

组成

我有这个:

(string->list (number->string 1234))

不幸的是它添加了#和s。我猜这是一个数字的字符串表示。我该如何删除这些符号。因为我需要重新排序整数,并打印出一个列表。

这是上面命令的输出:

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

5 个答案:

答案 0 :(得分:6)

这是我写的一个函数,每次除以10将数字缩小:

(define (num->list num)
  (if (< num 10)
      (list num)
      (append (num->list (floor (/ num 10)))
              (list (- num (* 10 (floor (/ num 10))))))))

显然这仅适用于正整数,但如果你需要否定,则可以轻松修改。

答案 1 :(得分:3)

正如乔纳森所说,#\意味着它是一个角色。所以你必须将角色转换为数字。这是一种简单的方法。

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

答案 2 :(得分:0)

我不熟悉方案,但稍微代码密集,与语言无关的方法是使用数学循环来获取每个数字。

如果1234是x: digit_1 = x%10 digit_2 = x%100 - digit_1 digit_3 = x%1000 - digit_2 - digit_1 等

您需要在每个工作站添加一个检查,以便x&lt; 1000,在数字3后停止。根据语言,您可以通过各种方式为此添加循环。

答案 3 :(得分:0)

当你将字符串转换为列表时,你正在建立一个字符列表,这就是为什么你得到#。 #\是字符分隔符。所以当你完成列表操作时,你可以很容易地将它重新转换回字符串。

答案 4 :(得分:0)

我会帮助你注意到:

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