Haskell型数学问题
|
我是Haskell初学者。我尝试编写将返回倒数第二个列表元素的函数。
我开始是这样的:
lastButOne :: [a] -> a
lastButOne list = if null list
then
0
else
length list
0字符串我得到错误:
Couldn\'t match type `a\' with `Int\'
`a\' is a rigid type variable bound by
the type signature for lastButOne :: [a] -> a
我明白。但是我在这里能做什么?我不知道清单类型。我可以在这里放什么?
谢谢。
没有找到相关结果
已邀请:
4 个回复
厘恼轨
使用警卫:
使用Maybe的MonadPlus实例:
通常,对于MonadPlus的任何实例:
尽管您必须在某处向编译器指定希望将结果作为Maybe。通常,这将是类型推断的,因为它将被传递给期望Maybe的函数。 请记住,这在O(n)中运行。您可能不想找到列表的倒数第二个元素...为什么需要这样做?至少考虑使用数组代替。
缮淳彼誊
*(\“此函数将获取包含任何类型元素的列表,并返回任何值为
\”的值)。 但是,由于要返回倒数第二个元素而不是列表的长度,因此类型签名是正确的,但代码不是。您必须从列表中取出某些项,或者以某种方式(
,使用
返回类型,使用模式matchign,并且在这些情况下仅忽略子句,返回
)处理没有倒数第二个元素的列表因为它们少于两个元素。 (*)如果序曲
不仅仅表现performance15ѭ,那将是performance13ѭ。
河饶办斜施
该函数从开始删除元素,直到剩下2个元素,然后这两个元素中的第一个是last-But-One。
貉骂