【发布时间】:2021-10-03 07:53:16
【问题描述】:
例如,给定一个元组 (2, 3) 作为参数,
它应该返回[(0,0), (0,1), (0,2), (1,0), (1,1), (1,2)],
虽然它可以是任何顺序。
这是我想出的代码,但是它没有返回正确的结果,谁能提供更好的解决方案或想法?
getAll :: (Int, Int) —> [(Int,Int)]
getAll (x,y)
| x == 0 && y == 0 = [(0,0)]
| x == 1 && y == 1 = [(1,1)]
| 0 + 1 < x && 0 + 1 < y
= (0,0) : getAll (x+1, y+1)
更新:
getAll :: (Int, Int) -> [(Int,Int)]
getAll (x,y) = case (x,y) of
(0,0) -> [(0,0)]
(1,1) -> [(0,0)]
(0, y) -> (0, y-1) : getAll (0, y-1)
(x, 0) -> (x-1, 0) : getAll (x-1, 0)
我尝试将它计算为两种情况,但我有一个问题,例如当我输入(0,3) 时,它会输出[(0,2), (0,1), (0,0), (0,0)]。我知道为什么会输出两次(0,0),但是我不知道怎么解决,你能看看我的代码,看看问题出在哪里?
【问题讨论】:
-
你好,我只是想问一下如何将代码发布为文本,这是我第一次发布问题。谢谢
-
您只需输入代码。 (我已经为你做了)。
-
我可以向您展示一个使用列表理解来解决此问题的单行程序。但也许你必须自己用递归来解决它?
-
谢谢你帮我改。如果您能告诉我如何以单线性方式编写它,那就太好了。另外,我重写了我的代码,不知道上面的代码怎么改?
-
点击帖子下方的"edit",上面写着“分享编辑关注”。
标签: list haskell tuples range combinations