Haskell-理解:t[长度,头部]定义
做作业时我发现自己被一个问题困住了。我必须通过统一它们(教授称之为统一它们)从一个基本类型到一个“更复杂”类型。地图示例:Haskell-理解:t[长度,头部]定义,haskell,Haskell,做作业时我发现自己被一个问题困住了。我必须通过统一它们(教授称之为统一它们)从一个基本类型到一个“更复杂”类型。地图示例: map :: (c -> d) -> [c] -> [d] map :: (a -> b) -> [a] -> [b] 通过将c替换为a->b,将d替换为[a]->[b]并省略map的第一个参数,结果是[a->b]->[[a]->[b]],这是haskell在执行以下操作时返回的:t map map 在一个练习中,我有一个[lengt
map :: (c -> d) -> [c] -> [d]
map :: (a -> b) -> [a] -> [b]
通过将c
替换为a->b
,将d
替换为[a]->[b]
并省略map的第一个参数,结果是[a->b]->[[a]->[b]]
,这是haskell在执行以下操作时返回的:t map map
在一个练习中,我有一个[length,head]
,根据Haskell中的:t[length,head]::[[Int]->Int]
我在理解[length,head]
的工作原理时遇到问题。这是一个函数列表?它对列表执行head
,然后对结果应用length
我找不到这样的例子,每次我试图将一个或多个列表输入到[length,head]
时,它都会出错。我注意到[head,length]
的类型与[length,head]
的类型相同,这并不能帮助我理解它
[长度,头部]
应该如何工作
我在理解[length,head]
的工作原理时遇到问题。这是一个函数列表
是,它是一个包含两个元素的列表,这两个元素都是函数
它对列表执行head
,然后对结果应用length
否。它只是一个有两个函数的列表,就像你可以有两个Char
s的列表,或者两个String
s的列表一样,你可以有两个函数的列表。在Haskell函数中,函数是第一类公民,您可以将其作为参数传递,并将其作为函数的结果返回。然而,列表中的元素总是属于同一类型。因此,这意味着列表中的长度
和头部
必须是相同的类型
因此,这意味着,并且需要是相同的类型,因此我们可以说[a]->a
和[b]->Int
应该是相同的类型。这意味着a~Int
(因为两个函数的返回类型相同)和a~b
(因为两个类型的输入类型相同),因此,这两个函数的类型是[Int]->Int
因此,对于该列表,
头
和长度
具有as类型[Int]->Int
。因此,这意味着这两个函数的列表具有类型[[Int]->Int]
,您在什么上下文中试图准确地使用[length,head]
?不幸的是,由于这个作业是如何呈现的,我必须从类型length和head开始,并达到:t[length,head],就像上面的地图示例一样(如果我没有说清楚,我很抱歉,这对我来说是全新的,我对此感到非常困惑)。我们没有在任何地方实施它,也没有它如何工作的例子,所以我真的不知道如何[长度,头部]可以实现。当它在Haskell中返回带有:t的内容时,我想我缺少了它如何工作的逻辑,没有什么需要实现的。[length,head]
已经有了完整的描述。如果练习是关于统一类型的,它可能希望您展示如何统一length
和head
的类型,这对于将它们放在与[length,head]相同的列表中是必要的
。但奇怪的是,作业问题中没有明确说明这一点。哦,好的,我现在明白了。谢谢!