做作业时,我发现自己遇到了一个问题。我必须通过统一它们(教授称之为统一它们)从基本类型转变为“更复杂”的类型。地图地图示例:
map :: (c -> d) -> [c] -> [d]
map :: (a -> b) -> [a] -> [b]
Run Code Online (Sandbox Code Playgroud)
通过替换cwith a -> b, dwith[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]应该如何工作?
我在理解
[length, head]工作原理时遇到问题。它是一个函数列表?
是的,它是一个包含两个元素的列表,这两个元素都是函数。
它执行
head到一个列表,然后length应用于结果?
没有。它只是一个有两个函数的列表,就像你可以有一个包含两个Chars的列表,或者两个Strings,你可以有一个包含两个函数的列表。在 Haskell 中,函数是一等公民,您可以将它们作为参数传递,并将它们作为函数的结果返回。然而,列表中的元素总是属于同一类型。所以这意味着列表中的 thelength和 thehead需要是相同的类型。
这意味着head :: [a] -> a, 和length :: [b] -> Int需要是相同的类型,因此我们可以说[a] -> a和[b] -> Int应该是相同的类型。这意味着a ~ Int(由于两个函数的返回类型相同),并且a ~ b(由于两个类型的输入类型相同),因此,两个函数的类型为[Int] -> Int。
因此,对于此列表, thehead和 thelength具有 as type [Int] -> Int。因此,这意味着这两个函数的列表具有 type [[Int] -> Int]。
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |