【发布时间】:2020-09-17 12:31:02
【问题描述】:
我是 Haskell 的新手,我正在尝试创建一个接受三元组并返回三元组数组的函数,如下所示:
tripleVariations 1 (0,0,0)
=> [(1,0,0), (0,1,0), (0,0,1)]
我了解如何使用模式匹配匹配三元组中的特定值,我什至创建了一个自定义函数,将函数映射到三元组,但我不明白如何替换三元组的一个值,添加到数组,then 继续到三元组中的下一个值。我发现我倾向于根据命令式范式过多地尝试解决这些问题,这正是我试图避免的。欢迎任何帮助,谢谢!
【问题讨论】:
-
你真的可以写吗?
tripleVariations w (x,y,z) = [(w,y,z), (x,w,z), (x,y,w)]? -
解决方案的简单程度让我大吃一惊,非常感谢您!我只是想知道这是否不是太多“硬编码”的事情,或者这在功能范式中是否很正常?再次感谢!
-
不,我认为“函数式编程中的正常”是制作一个可以在任何大小的元组上工作的函数。但是为什么要麻烦呢?
-
不要为了抽象而抽象;抽象如果它使您的代码更简单。
-
已经将此发布到已发布的答案中,但是:我假设我简化了我试图解决的问题,使其仍可用于最终解决方案,但现在我担心我确实需要更多的债务信息:我实际上需要能够在将最终三元组添加到数组时检查一个条件,因此,即仅在初始值为 0 时替换会导致:
tripleVariations 1 (0,0,2)=> [(1,0,2), (0,1,2)]跨度>
标签: haskell