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

这个函数在Haskell中做什么?I';我对这种类型感到困惑,haskell,Haskell,似乎a对函数没有任何影响。我的理解是,这个函数接受两个参数,其中第二个是列表,并返回第一个参数和第二个列表的尾部。 但是,我对这种类型感到困惑: q3 a (b:[]) = a b q3 a (b1:b2:bs) = q3 a (b2:bs) a如何与t1->t相关? 谢谢。函数的第一行在等号后有ab。因此a必须是一个函数,因为它是一个函数应用程序。由于b是列表元素的类型,因此a是从列表元素类型到函数返回类型的函数 q3 :: (t1 -> t) -> [t1] -> t

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

q3 a (b:[]) = a b
q3 a (b1:b2:bs) = q3 a (b2:bs)
a
如何与
t1->t
相关?
谢谢。

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

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

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

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

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

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

您可以重写此函数

q3 :: (t1 -> t) -> [t1] -> t
以“惯常”的方式

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

现在很容易看出,
q3 f as=f(last as)
。函数
q3
将函数
f
应用于列表的最后一个元素
,因为您可以重写此函数

q3 :: (t1 -> t) -> [t1] -> t
以“惯常”的方式

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

现在很容易看出,
q3 f as=f(last as)
。函数
q3
将函数
f
应用到列表的最后一个元素
作为

哦,对了!Haskell中的函数只有一个参数。哦,对了!Haskell中的函数只有一个参数。如果定义了
q3 f[x]=f x,就更容易理解了;q3 f(u:xs)=q3 f xs
,这是完全相同的。请记住,在haskell中,函数应用程序只是一个空格!如果定义为
q3f[x]=fx,则更容易理解;q3 f(u:xs)=q3 f xs
,这是完全相同的。请记住,在haskell中,函数应用程序只是一个空格!