Scheme 将整数转换为列表?
我目前正在尝试将整数转换为列表 例如 1234=>由1、2、3、4组成的列表 我有这个: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
(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‘‘‘‘‘‘)’))