映射Racket中的RAList范围将返回空列表
我使用了RALIST并将一个范围映射到随机数函数上,但结果是空列表映射Racket中的RAList范围将返回空列表,racket,Racket,我使用了RALIST并将一个范围映射到随机数函数上,但结果是空列表 #lang racket (require data/ralist) (map (lambda (_) (random 100)) (range 10)) 返回'(),而它应该返回10个随机数,对吗 在摆脱了ralist要求后,它可以工作: #lang racket (map (lambda (_) (random 100)) (range 10)) 返回: (88 5 78 12 31 23 45 17
#lang racket
(require data/ralist)
(map (lambda (_) (random 100))
(range 10))
返回'(),而它应该返回10个随机数,对吗
在摆脱了ralist要求后,它可以工作:
#lang racket
(map (lambda (_) (random 100))
(range 10))
返回:
(88 5 78 12 31 23 45 17 64 96)
只需自行完成范围操作即可满足以下要求:
#lang racket
(range 10)
返回:
(01 2 3 4 5 6 7 8 9)
还返回:
(0123456789)
所以我不确定是什么导致了ralist或map在上面的行为不端
PS我知道构建列表可能是构建这样一个列表的更好方法,但我感兴趣的是为什么它不起作用。当包含
ralist
时,map
被重新定义为:
;; [X -> y] [RaListof X] -> [RaListof Y]
;; Takes advantage of the fact that map produces a list of equal size.
(define ra:map
(case-lambda
[(f ls)
(let recr ((ls ls))
(match ls
[(struct kons (s t r))
(make-kons s (tree-map f t) (recr r))]
[else ra:empty]))]
[(f . lss)
(let recr ((lss lss))
(cond [(ra:empty? (car lss)) ra:empty]
[else
;; IMPROVE ME: make one pass over lss.
(make-kons (kons-size (car lss))
(tree-map/n f (map kons-tree lss))
(recr (map kons-rest lss)))]))]))
合同规定它需要一个RaListof X
<代码>(列表)被此模块重载以创建一个RaListof
,这就是为什么如果您尝试:
#lang racket
(require (planet dvanhorn/ralist:3:5))
(map (lambda (_) (random 100))
(list 0 1 2 3 4 5 6 7 8 9))
你会得到如下结果:
(38 8 62 99 87 24 57 18 28 39)
我的建议是:重新定义(范围)
以返回RaListof
下面是一个使用重新定义的(构建列表)
的示例:
编辑:
我将此函数添加到主要的RaList源代码中。您使用的是什么版本的Racket?我已经有了6.01版,data/ralist似乎没有包括在内。这是你从某处下载的软件包吗?如果是这样的话,查看源代码和/或文档可能会有所帮助。6.1,对不起,我应该提到RAList是David Van Horn的纯功能随机访问列表()@user2741287,我已将range函数添加到主要的RAList源代码中
(38 8 62 99 87 24 57 18 28 39)
(define (range n)
(build-list n (lambda (x) x)))