Haskell zipWith 函数出现类型不匹配错误
Getting a type mismatch error with the Haskell zipWith function
我是 Haskell 的新手。我有一个 Neuron
数据类型,它拥有 Double
个值的列表:
data Neuron = Neuron [Double]
deriving (Eq, Read, Show)
我正在尝试对 Neuron 拥有的列表中的每个元素和另一个列表中的每个元素求和:
sommeNeuron :: Neuron -> [Double] -> Neuron
sommeNeuron n1 n2 = n'
where {
--n' = Neuron(zipWith (+) n1 n2);
n' = zip n1 n2
}
这给了我一个编译时错误:
Couldn't match expected type ‘[a]’ with actual type ‘Neuron’
只需要调整一下,
sommeNeuron :: Neuron -> [Double] -> Neuron
sommeNeuron (Neuron n1) n2 = Neuron (zipWith (+) n1 n2)
{-
Neuron n1 :: Neuron
n1 :: [Double]
n2 :: [Double]
zipWith (+) n1 n2 :: [Double]
Neuron (zipWith (+) n1 n2) :: Neuron
-}
因为您的数据类型定义为
data Neuron = Neuron [Double]
即[Double]
列表在“标签”Neuron
后面。这意味着有关系
-- data Type
-- constructor
Neuron n1 :: Neuron
-------------------------------
n1 :: [Double]
-- variable
-- name
我是 Haskell 的新手。我有一个 Neuron
数据类型,它拥有 Double
个值的列表:
data Neuron = Neuron [Double]
deriving (Eq, Read, Show)
我正在尝试对 Neuron 拥有的列表中的每个元素和另一个列表中的每个元素求和:
sommeNeuron :: Neuron -> [Double] -> Neuron
sommeNeuron n1 n2 = n'
where {
--n' = Neuron(zipWith (+) n1 n2);
n' = zip n1 n2
}
这给了我一个编译时错误:
Couldn't match expected type ‘[a]’ with actual type ‘Neuron’
只需要调整一下,
sommeNeuron :: Neuron -> [Double] -> Neuron
sommeNeuron (Neuron n1) n2 = Neuron (zipWith (+) n1 n2)
{-
Neuron n1 :: Neuron
n1 :: [Double]
n2 :: [Double]
zipWith (+) n1 n2 :: [Double]
Neuron (zipWith (+) n1 n2) :: Neuron
-}
因为您的数据类型定义为
data Neuron = Neuron [Double]
即[Double]
列表在“标签”Neuron
后面。这意味着有关系
-- data Type
-- constructor
Neuron n1 :: Neuron
-------------------------------
n1 :: [Double]
-- variable
-- name