q3 a (b:[]) = a b
q3 a (b1:b2:bs) = q3 a (b2:bs)
似乎a
对该功能没有任何影响。我的理解是这个函数有两个参数,第二个是列表,并返回第一个参数和第二个列表的尾部。
但是,我对类型感到困惑:
q3 :: (t1 -> t) -> [t1] -> t
a
与t1 -> t
的关系如何?
谢谢。
答案 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