这个函数在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中,函数应用程序只是一个空格!