不确定如何在 haskell 中输入我的函数

Unsure in how to type my function in haskell

nFibbo :: [x] -> [x]
nFibbo x = x ++ sum x

我正在尝试设置一个 Fibonacci 函数,我希望输入是一个不确定长度的整数数组,它的输出是一个 1+ 第一个长度的整数数组。

我试过完全不输入它 运行

nFibbo x = x ++ sum x

但这会出现不同的错误 "cannot construct the infinite type: a ~ [a]"

嗯,这很奇怪,因为:

如果 x 是一个数组 [a],那么 sum x 将是一个 a(++) :: [a] -> [a] -> [a] 函数接受两个列表,而不是一个列表和一个元素。

但是您可以构造一个包含一个元素的列表,例如使用列表语法:

nFibbo :: <b>Num x =></b> [x] -> [x]
nFibbo x = x ++ <b>[</b>sum x<b>]</b>  -- list with one element

请注意,此处您将添加 所有 个先前元素的总和作为最后一个元素。不是最后 两个 元素的总和(就像 Fibonacci 通常那样)。

还需要加上Num x类型约束,否则列表元素的类型本身不是数值类型,无法计算这些数字的sum .