Function Haskell,高阶函数和什么输入属于这里?
因为我不理解haskell中的高阶函数,所以我尝试了这个Function Haskell,高阶函数和什么输入属于这里?,function,haskell,input,Function,Haskell,Input,因为我不理解haskell中的高阶函数,所以我尝试了这个 tryout :: (a ->b) -> Int tryout p q = 4 我也可以 试用期p=4 为什么既可以做p又可以做p q tryout :: (a ->b) -> Int tryout p q = 4 当我试着得到它的时候,我用34,3->4和3进行了试用,但都没有成功。 有人能给我解释一下我在这里做什么,为什么可以写p和pq(这可能是因为p=a->b,pen q是a和b),我能举一个例子来说明我
tryout :: (a ->b) -> Int
tryout p q = 4
我也可以
试用期p=4
为什么既可以做p又可以做p q
tryout :: (a ->b) -> Int
tryout p q = 4
当我试着得到它的时候,我用34,3->4和3进行了试用,但都没有成功。
有人能给我解释一下我在这里做什么,为什么可以写p和pq(这可能是因为p=a->b,pen q是a和b),我能举一个例子来说明我可以做什么来称为试用吗 tryout
将任何函数作为其参数,并返回一个整数。因为没有任何值可以调用函数,tryout
只能忽略它,并返回一些整数。(对于类型为Int
的每个值,总共有一个tryout
的实现)
如果tryout
还对类型a
附加了一个参数,那么您至少可以应用该函数来获取类型b
的值,但您仍然无法对其执行任何操作,因为tryout
必须返回Int
tryout :: (a -> b) -> a -> Int
tryout _ _ = 4
-- tryout length "foo" == 4; a ~ String, b ~ Int
现在,假设除了类型a->b
的函数,类型a
的值之外,还有类型b->Int
的参数。现在我们终于可以做一些不平凡的事情了(尽管仍然很简单)
我们将f
应用于x
以获得b
类型的值,然后将其传递给g
,以获得Int
我们可以返回的值。它不是唯一的类型检查定义;我们可以
仍然忽略
f
、x
和g
,并像前面的示例一样返回一个固定的Int
。上述操作会产生一个错误,tryout
此处采用一个参数。类型为A->b
的函数。你是对的,它不是。但我还是不明白a->b的意思。a->b型的功能是什么?你能简单地给我解释一下吗,因为我觉得我没有掌握这方面的任何概念。通过类型签名,tryout
只接受一个类型为(a->b
)的函数参数,并返回一个Int
类型值。例如tryout f=const 4 f
或(tryout=const 4
作为速记)。它还可以使用f
最终生成一个整数值,而不是丢弃它。a->b
是任何函数的类型,因为输入类型和返回类型都不受限制,并且两者不必相同。
tryout :: (a -> b) -> a -> Int
tryout _ _ = 4
-- tryout length "foo" == 4; a ~ String, b ~ Int
tryout :: (a -> b) -> a -> (b -> Int) -> Int
tryout f x g = g (f x)