映射Racket中的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

我使用了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 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)))