Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Haskell zipWith函数获取类型不匹配错误_Haskell_Types_Type Mismatch_Algebraic Data Types_Custom Data Type - Fatal编程技术网

使用Haskell zipWith函数获取类型不匹配错误

使用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

我是哈斯克尔的新手。我有一个Neuron数据类型,它拥有一个双值列表:

我试图对神经元拥有的列表和其他列表中的每个元素求和:

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}的函数。