【发布时间】:2020-10-05 10:55:07
【问题描述】:
我正在尝试从两个Ints 和另一个元组列表生成一个列表,以表示公寓楼的门铃系统。第一个数字是楼层数,第二个数字是“不存在”/我们跳的楼层,列表是楼层的公寓分布。例如:
geneList 10 4 [("Rgt", 10), ("Lft", 8), ("Cent", 3)]
(在本例中,我们将有 10 层,而第 4 层不存在。只有前三层有 'Cent' 'Rgt' 和 'Lft' 公寓。从 5 到 9 层只有 'Rgt' 和 '左”公寓。10 到 11 层只有“右”公寓。)
返回值必须是:
["1Rgt","1Lft","1Cent","2Rgt","2Lft","2Cent","3Rgt","3Lft","3Cent","5Rgt","5Lft","6Rgt","6Lft","7Rgt","7Lft","8Rgt","8Lft","9Rgt","9Lft","10Rgt","11Rgt"]
我尝试了不同的方法,但始终没有达到结果。
我最后一次尝试是:
geneList :: Int -> Int -> [(Char, Int)] -> [Char]
geneList 0 _ _ = []
geneList x y xs = [a++b | a <- [1..x+1], b <- xs, (\=) a y]
有人可以帮帮我吗?
【问题讨论】:
-
预期结果中的最后一个元素不应该是
11Rgt吗? -
我不确定我是否正确理解了这个问题,但是如果每个元组中的
snd数字代表这个“边”存在多少层,那么这不是geneList的第一个参数(x) 冗余? -
您还应该发布失败尝试的输出。
-
@MarkSeemann 是的,它应该是 11Rgt,我现在更正了,谢谢。我认为,第一个参数是让它更简单,比如如果我尝试geneList 0 3 [('N',3), ('S',1)] 它是不可能的,或者如果我尝试类似geneList 3 10 [( 'A',3), ('B',3)] 返回值将是 ["1A","1B",""2A","2B","3A","3B"]。我没有知道我是否说清楚
-
geneList 4 10 [('A',3), ('B',3)]应该返回什么?