这个函数在Haskell中做了什么?我对这种类型感到困惑

时间:2014-09-09 12:04:06

标签: haskell

q3 a (b:[]) = a b
q3 a (b1:b2:bs) = q3 a (b2:bs)

似乎a对该功能没有任何影响。我的理解是这个函数有两个参数,第二个是列表,并返回第一个参数和第二个列表的尾部。 但是,我对类型感到困惑:

q3 :: (t1 -> t) -> [t1] -> t

at1 -> t的关系如何? 谢谢。

2 个答案:

答案 0 :(得分:8)

在等号后,函数的第一行有a b。因此,a必须是一个函数,因为它是一个函数应用程序。由于b是列表元素的类型,因此a是一个函数,从列表中的元素类型到函数的返回类型。

该函数仅将a应用于列表的最后一个元素。因此,它类似于a . last

答案 1 :(得分:1)

您可以重写此功能。

q3 :: (t1 -> t) -> [t1] -> t
q3 a (b:[]) = a b
q3 a (b1:b2:bs) = q3 a (b2:bs)

到'通常'风格

q3 :: (a -> b) -> [a] -> b
q3 f (a:[]) = f a
q3 f (a1:a2:as) = q3 f (a2:as)

现在很容易看到q3 f as = f (last as)。函数q3将函数f应用于列表as

的最后一个元素