在写这个问题之前,我试着把我的代码简化到导致错误的部分,而简化的代码工作.所以我首先要说的是:
这段代码应该取每个x值,并用x值在索引处增加y项。它会变异。参见下面的代码示例。
#lang racket
(require math/array)
(define xs (array #[5 1 3 1]))
(define ys (mutable-array #[0 0 0 0 0 0 0 0 0 0]))
(define result (array-map (λ (x) (array-set! ys
(vector x)
(add1 (array-ref ys (vector x)))))
xs))
>> ys
(mutable-array #[0 2 0 1 0 2 0 0 0 0])下面是我在这个问题标题中出现错误时正在编写的代码:
第一个函数接受一个未排序的数组,并在其中找到最大值。
(define (make-auxiliary-array unsorted)
(local ((define size-for-aux (array-ref (array-axis-max unsorted 0)
#())))
(array->mutable-array (make-array (vector size-for-aux) 0))))第二个函数类似于顶部的工作代码。唯一的区别似乎是我在本地定义和使用一个数组。在顶部的工作代码片段中,称为辅助性数组的数组类似于ys。
(define (count-instances unsorted)
(local ((define auxiliary (make-auxiliary-array unsorted)))
(array-map (λ (u) (array-set! auxiliary
(vector u)
(add1 (array-ref auxiliary (vector u)))))
unsorted)))
>> (count-instances (array #[3 6 4 1 3 4 1 4]))
array-ref: expected indexes for shape '(6); given '#(6)问题:
发布于 2016-02-02 02:14:17
您的示例不起作用的原因是#(6)不是形状#(6)的有效索引。#(0),#(1),。#(5)是有效的索引,但就像向量或列表索引一样,它们从0到n - 1。
问题在size-for-aux in make-auxiliary-array中。表达式(array-ref (array-axis-max unsorted 0) #())是最大索引的大小,但size-for-aux必须比它多一个,即(add1 (array-ref (array-axis-max unsorted 0) #()))。
你的例子是:
#lang racket
(require math/array)
(define (make-auxiliary-array unsorted)
(local ((define size-for-aux (add1 (array-ref (array-axis-max unsorted 0)
#()))))
(array->mutable-array (make-array (vector size-for-aux) 0))))
(define (count-instances unsorted)
(local ((define auxiliary (make-auxiliary-array unsorted)))
(array-map (λ (u) (array-set! auxiliary
(vector u)
(add1 (array-ref auxiliary (vector u)))))
unsorted)))
(count-instances (array #[3 6 4 1 3 4 1 4]))但是,这会产生(array #[#<void> #<void> #<void> #<void> #<void> #<void> #<void> #<void>]),因为您从未真正返回auxiliary。所以你可能是说:
(define (count-instances unsorted)
(local ((define auxiliary (make-auxiliary-array unsorted)))
(array-map (λ (u) (array-set! auxiliary
(vector u)
(add1 (array-ref auxiliary (vector u)))))
unsorted)
auxiliary))
(count-instances (array #[3 6 4 1 3 4 1 4]))产生(mutable-array #[0 2 0 3 3 0 1])。
嗯。我以为是(mutable-array #[0 2 0 2 3 0 1])。如果这是你真正想要的,你还有更多的东西要弄清楚,但那将是一个不同的问题。
https://stackoverflow.com/questions/35143008
复制相似问题