使用Haskell zipWith函数获取类型不匹配错误
我是哈斯克尔的新手。我有一个Neuron数据类型,它拥有一个双值列表: 我试图对神经元拥有的列表和其他列表中的每个元素求和:使用Haskell zipWith函数获取类型不匹配错误,haskell,types,type-mismatch,algebraic-data-types,custom-data-type,Haskell,Types,Type Mismatch,Algebraic Data Types,Custom Data Type,我是哈斯克尔的新手。我有一个Neuron数据类型,它拥有一个双值列表: 我试图对神经元拥有的列表和其他列表中的每个元素求和: sommeNeuron :: Neuron -> [Double] -> Neuron sommeNeuron n1 n2 = n' where { --n' = Neuron(zipWith (+) n1 n2); n' = zip n1 n2
sommeNeuron :: Neuron -> [Double] -> Neuron
sommeNeuron n1 n2 = n'
where {
--n' = Neuron(zipWith (+) n1 n2);
n' = zip n1 n2
}
这给了我一个编译时错误:
无法将预期类型“[a]”与实际类型“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]
i、 e.[Double]列表位于标记神经元后面。这意味着有关系
-- data Type
-- constructor
Neuron n1 :: Neuron
-------------------------------
n1 :: [Double]
-- variable
-- name
只是需要调整一下
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]
i、 e.[Double]列表位于标记神经元后面。这意味着有关系
-- data Type
-- constructor
Neuron n1 :: Neuron
-------------------------------
n1 :: [Double]
-- variable
-- name
您的两个参数具有不同的类型,因此将它们称为n1和n2不是一个好主意。假设这些数字是权重,n2是现有权重的增量列表。因此,您可以调用初始权重ws0、增量ws1和结果神经元ws2的权重。因此,函数体的开头应该是:sommeNeuron Neuron ws0 ws1=Neuron ws2,其中{TODO必须将ws2定义为ws0和ws1}的函数。您的两个参数具有不同的类型,因此将它们称为n1和n2不是一个好主意。假设这些数字是权重,n2是现有权重的增量列表。因此,您可以调用初始权重ws0、增量ws1和结果神经元ws2的权重。因此,函数体的开头是:sommeNeuron Neuron ws0 ws1=Neuron ws2,其中{TODO必须将ws2定义为ws0和ws1}的函数。