我需要定义一个函数
deal :: [String] -> [String] -> [(String,String)]
它需要像这样工作:
deal ["Hercule","Ariadne"] ["Ace","Joker","Heart"] -- Outputs [("Ace","Hercule"),("Joker","Ariadne"),("Heart","Hercule")]
take 4 (deal ["a","b","c"] (map show [0..])) -- Outputs [("0","a"),("1","b"),("2","c"),("3","a")]
deal ("you":(repeat "me")) ["1","2","3","4"] -- Outputs [("1","you"),("2","me"),("3","me"),("4","me")]
而且,老实说,这是一个练习;建议我使用
zip
和 cycle
。
我已经尝试解决这个问题三个半小时,但未能找到解决方案。
问:您能给我一个如何解决这个问题的提示吗?
我最好的尝试
deal :: [String] -> [String] -> [(String, String)]
deal ps cs = dealHelper ps cs ps cs []
where dealHelper [] [] _ _ result = result
dealHelper ps [] _ _ result = dealHelper ps (take (length ps) cs) result
dealHelper [] cs allps allcs result = dealHelper (take (length cs))
(这甚至无法编译。)
解决方案是:
deal :: [String] -> [String] -> [(String,String)]
deal ps cs = zip cs (cycle ps)