Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 三重存取元件_Haskell - Fatal编程技术网

Haskell 三重存取元件

Haskell 三重存取元件,haskell,Haskell,如果在Haskell中我有一个元组: x = (1, 2) 我可以使用fst x来检索1,使用snd x来检索2 我在想,如果我有三个: y = (1, 2, 3) 我可以使用类似的函数吗?您需要编写自己的提取器函数: extractFirst :: (a, b, c) -> a extractFirst (a,_,_) = a fst和snd函数仅适用于元组,即(a,b)没有内置元组。如果有,您将需要大量的1of2,2of2,1of4,4of7。与所有内置函数不同,fst和snd是

如果在Haskell中我有一个元组:

x = (1, 2)
我可以使用fst x来检索1,使用snd x来检索2

我在想,如果我有三个:

y = (1, 2, 3)

我可以使用类似的函数吗?

您需要编写自己的提取器函数:

extractFirst :: (a, b, c) -> a
extractFirst (a,_,_) = a

fst
snd
函数仅适用于元组,即
(a,b)
没有内置元组。如果有,您将需要大量的
1of2
2of2
1of4
4of7
。与所有内置函数不同,
fst
snd
是专门定义的,对于大多数其他情况,我们使用模式匹配:

4of7 (_, _, _, x, _, _, _) = x
lens
库是一个相当流行的高级库,它通过使用巧妙的类型类提供了所有这些功能

3of4 = view _3
4of4 = view _4
3of7 = view _3
...

但是这种普遍性需要付出相当高的复杂性代价。

正如前面提到的,要走的路是模式匹配。但是,为了完整性,我想提到的是,您可以简单地使用lambda函数:

head $ map (\(a, b, c) -> a) (y : [])

什么意义上的复杂性?使用这些特定的东西并不复杂,但它确实引入了许多依赖项,这可能会改变阴谋集团构建的计算复杂性类别。
view\u 3
的类型正是您所期望的,但超出了您的期望。你可以用n位的
*来确定它,但实际上你并不比模式匹配和大量的依赖性好多少。