gpt4 book ai didi

arrays - Haskell 数组索引超出范围

转载 作者:行者123 更新时间:2023-12-03 14:24:08 26 4
gpt4 key购买 nike

我的代码已粘贴 here .
下面是我的 ghci 调试 session 。当'len'绑定(bind)为90570时,我仍然不明白为什么它的范围为(0,-193459561)。

*Main> :break 125
Breakpoint 4 activated at SVMCF.hs:125:13-86
*Main> :trace main
Stopped at SVMCF.hs:125:13-86
_result :: UA.Array Int [User] = _
len :: Int = 90570
rts :: [RTuple] = (1,1,5.0) : (1,2,3.0) : (1,3,4.0) : (1,4,3.0) :
(1,5,3.0) : ....
[SVMCF.hs:125:13-86] *Main> :lis
124 points :: A.Array Int [Int]
125 points = assert (len > 0) $ A.listArray (1::Int, len) $ map (\(u,i,r) -> [u,i]) rts
126 values :: UA.UArray Int Double
[SVMCF.hs:125:13-86] *Main> :ste
Stopped at SVMCF.hs:125:13-28
_result :: UA.Array Int [User] -> UA.Array Int [User] = _
len :: Int = 90570
[SVMCF.hs:125:13-28] *Main> :ste
Stopped at SVMCF.hs:125:21-27
_result :: Bool = _
len :: Int = 90570
[SVMCF.hs:125:21-27] *Main> :ste
Stopped at SVMCF.hs:125:32-86
_result :: UA.Array Int [User] = _
len :: Int = 90570
rts :: [RTuple] = (1,1,5.0) : (1,2,3.0) : (1,3,4.0) : (1,4,3.0) :
(1,5,3.0) : ....
[SVMCF.hs:125:32-86] *Main> :ste
Stopped at SVMCF.hs:125:32-56
_result :: [[User]] -> UA.Array Int [User] = _
len :: Int = 90570
[SVMCF.hs:125:32-56] *Main> :lis
124 points :: A.Array Int [Int]
125 points = assert (len > 0) $ A.listArray (1::Int, len) $ map (\(u,i,r) -> [u,i]) rts
126 values :: UA.UArray Int Double
[SVMCF.hs:125:32-56] *Main> len
90570
[SVMCF.hs:125:32-56] *Main> :ste
Stopped at SVMCF.hs:125:60-86
_result :: [[User]] = _
rts :: [RTuple] = (1,1,5.0) : (1,2,3.0) : (1,3,4.0) : (1,4,3.0) :
(1,5,3.0) : ....
[SVMCF.hs:125:60-86] *Main> :ste
*** Exception: Ix{Int}.index: Index (1) out of range ((1,-193459561))

最佳答案

我怀疑您认为的表达式中没有导致索引超出范围异常!

Data.Array.listArray (1,-10) [2,3,4,5]



不会抛出任何异常,它只是给你一个空数组。还要注意最后一条调试消息中的列号:

Stopped at SVMCF.hs:125:60-86



60 到 86 是 map (\(u,i,r) -> [u,i]) rts其中显然没有任何索引: map 中当然没有,第一个参数中也没有, rts看起来也很干净,因为它直接来自 ua.base通过秒差距。

因为 Haskell 的求值顺序被允许相当自由,所以有可能通过减少完全不同的表达式来引发异常。你确定你传递给 SVM 的所有其他东西都设置正确了吗?特别是,假设您使用的是 Int -索引数组,您确定任何数组中都没有发生整数溢出吗?您的任何数据集,例如 4101507735 或 8396475031 记录是否长,因为这些记录溢出到 -193459561 为 Int )。
:history GHCi 调试器中的命令为您提供更多信息吗?

关于arrays - Haskell 数组索引超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6241650/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com