如果在Haskell我有一個元組:哈斯克爾三重訪問元素
x = (1, 2)
我可以用FST X檢索1和SND X檢索2
我在想,如果我有三:
y = (1, 2, 3)
有沒有類似的功能我可以使用?
感謝(:
如果在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
。而不是讓他們al l由於內置函數,fst
和snd
專門定義,對於其他大多數情況下,我們使用模式匹配:
4of7 (_, _, _, x, _, _, _) = x
的lens
庫,一個相當流行的先進庫,並通過巧妙的類型類提供所有這些。
3of4 = view _3
4of4 = view _4
3of7 = view _3
...
但是,通用性的價格相當陡峭。
複雜在什麼意義?使用這些特定的東西並不複雜,但它確實引入了很多依賴關係,這可能會改變cabal構建的計算複雜性類。 – dfeuer
'view_3'的類型正是你所期望的,但超出了你的想象。你可以用'* ofN'位指出它,但是你實際上並不比模式匹配更好,並且還有很多依賴。 –
如前所述,要走的路是模式匹配。然而,爲了完整起見,我想提一提,你可以簡單地使用lambda功能:
head $ map (\(a, b, c) -> a) (y : [])
AAAH好,謝謝:d – MrD