Haskell 从元组列表中删除元素

Haskell 从元组列表中删除元素,haskell,tuples,Haskell,Tuples,我在编写从元组中的列表中删除元素的函数时遇到问题 问题是,我希望函数返回元组。但是,使用delete函数from Data.List会给我一个列表 代码: 由于Haskell中的数据是不可变的,我如何在deleteCandidate函数中返回元组?我需要重建一个细胞吗 简单地对元组进行模式匹配以提取两个片段,对其中一个片段进行操作,然后将其重新组合到一个新元组中: deleteCandidate :: Int -> Cell -> Cell deleteCandidate cand

我在编写从元组中的列表中删除元素的函数时遇到问题

问题是,我希望函数返回元组。但是,使用delete函数from Data.List会给我一个列表

代码:


由于Haskell中的数据是不可变的,我如何在deleteCandidate函数中返回元组?我需要重建一个细胞吗

简单地对元组进行模式匹配以提取两个片段,对其中一个片段进行操作,然后将其重新组合到一个新元组中:

deleteCandidate :: Int -> Cell -> Cell
deleteCandidate cand (x, xs) = (x, delete cand xs)
或者,由于a有一个函子实例,您可以编写

deleteCandidate :: Int -> Cell -> Cell
deleteCandidate cand = fmap (delete cand)
或者,更简短地说,您也可以省略显式的cand参数,并将deleteCandidate表示为一个简单的函数组合:

deleteCandidate :: Int -> Cell -> Cell
deleteCandidate = fmap . delete

就我个人而言,我最喜欢第二个版本,因为我发现很难思考这个组合是如何工作的,以及它与fmap delete的区别。

只需对元组进行模式匹配以提取两个片段,对其中一个片段进行操作,然后将其重新组合成一个新元组:

deleteCandidate :: Int -> Cell -> Cell
deleteCandidate cand (x, xs) = (x, delete cand xs)
或者,由于a有一个函子实例,您可以编写

deleteCandidate :: Int -> Cell -> Cell
deleteCandidate cand = fmap (delete cand)
或者,更简短地说,您也可以省略显式的cand参数,并将deleteCandidate表示为一个简单的函数组合:

deleteCandidate :: Int -> Cell -> Cell
deleteCandidate = fmap . delete
就我个人而言,我最喜欢第二个版本,因为我发现很难思考这个组合是如何工作的,以及它与fmap delete的区别