不确定如何在 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
.
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
.