haskell - Haskell奇怪的 `zip`错误

标签 haskell types compiler-errors

我正在尝试压缩两个[[Float]]数组,然后对每个元素进行一次计算。我认为生成的压缩数组将具有[([Float], [Float])]类型。

但是在Haskell告诉我的地方,我不断出错:

[1 of 1] Compiling Mod               ( Mod.hs, interpreted )

NN.hs:38:42:
    Couldn't match type ‘[Float]’ with ‘Float’
    Expected type: [Float]
      Actual type: [[Float]]
    In the second argument of ‘zip’, namely ‘bs’
    In the second argument of ‘map’, namely ‘(zip ws bs)’
Failed, modules loaded: none.

我似乎无法弄清楚MCVE,因为如果(kinda/sorta)试图这样做,那会是什么:
feedforward :: ([[Float]], [[Float]]) -> Float -> [Float]
feedforward (ws, bs) a = map (equation a) (zip ws bs)
  where equation a (w, b) = (sum $ zipWith (*) w b) + a

但这实际上可以编译!而我的真实代码如下所示:
data NNetwork = NNetwork { nlayers :: Int
                         , sizes   :: [Int]
                         , biases  :: [[Float]]
                         , weights :: [[Float]] }
                deriving (Show, Ord, Eq)

toFloat x = fromIntegral x :: Float

sig :: Float -> Float
sig a = 1 / (1 + exp (-a))


feedforward :: NNetwork -> Float -> [Float]
feedforward net a = map (eq22 a) (zip ws bs)
  where bs = biases net
        ws = weights net
        dot a b = sum $ zipWith (*) a b
        rep a b = replicate (length a) b
        eq22 a (w, b) = sig $ (dot w (rep w a)) + b

但是无效!

- 提前致谢

最佳答案

问题是:

eq22 :: Float -> ([Float], [Float]) ->  Float
eq22 a (w, b) = sig $ (dot w (rep w a)) + b

除了在这种情况下b[Float]并用作Float(请参阅+ b)。您是说要通过b来实现某种功能吗?

同样,这些不是数组,而是列表。

关于haskell - Haskell奇怪的 `zip`错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32750414/

相关文章:

带有 OpenGL 的 Haskell。 (未知的 GLUT 条目 glutInit)

python - 如何从sqlalchemy中的方言特定类型获取通用数据类型?

list - 如何为 ziplist 创建应用实例?

haskell - 带有 HashMap 的二义性类型变量

haskell - 在 Haskell 中基于运行时比较创建类型类的实例

matlab - 如何在 MATLAB 中获取变量的类型

generics - 如何在 Scala 中访问泛型类型的类型别名?

visual-studio-2010 - 为Android编译C++项目时权限被拒绝

swift - 找不到 -lBolts 的库

java - Java无效标志错误