【发布时间】:2015-09-25 16:36:58
【问题描述】:
我正在处理 3 元组中的 3 元组 ((a,b,c),(d,e,f),(g,h,i))。现在我想把这个元组作为输入,并作为输出生成一个元组列表,其中一个元素如果具有某个值,就会更改为一个值。
例子:
changefromtovalue :: a -> a -> ((a,a,a),(a,a,a),(a,a,a)) -> [((a,a,a),(a,a,a),(a,a,a))]
changefromtovalue 1 5 ((0,1,2),(1,2,3),(2,3,4)) results in [((0,5,2),(1,2,3),(2,3,4)),((0,1,2)(5,2,3)(2,3,4))]
现在我不使用整数,但我认为这个想法保持不变。
首先我想我想要某种地图,但这会立即更改所有值,而不是制作一个每个更改一个元素的列表。
然后我想,我可以做出所有变化(在示例中 [((5,x,x)..),((x,5,x)..),((x,x,5)..)] 并以某种方式删除不符合要求的那些,但我无法找到一种干净的方法来删除不需要的那些。
我尝试搜索并找到了一些有关为元组制定数据规范的信息,但我看不出这将如何真正简化这个特定问题。
转换为列表并使用列表然后再转换回来似乎更容易,但它仍然需要一种奇怪的选择。如果可能的话,我想避免使用大量的转换。
我正在寻找的是一个导致一种干净的方式的建议,而不是一个完整的代码行。
【问题讨论】:
-
你需要这个笨重的类型做什么?该任务是否允许用更方便的东西替换它?
-
是的,但我看不出将
((a,b,c),(d,e,f),(g,h,i))转换为[a,b,c,d,e,f,g,h,i]或[[a,b,c],[d,e,f],[g,h,i]]会如何使这项特定任务更容易。
标签: list haskell tuples element