我有一个锦标赛和2d“对手矩阵”的团队的1d列表。哈斯克尔边缘列表邻接矩阵
我只是想为每个团队提取一个对手列表。
我只是在学习Haskell,并且想知道,如果有人能够为下面已经工作的代码想出更优雅的解决方案。 ...也许是一个列表理解? ...
代码:
findOp :: (Eq a, Num a) => [b] -> [a] -> [b]
findOp (x:xs) (y:ys) | y == 1 = [x] ++ findOp xs ys
| otherwise = findOp xs ys
findOp [] [] = []
tab = [[0,1,0,1],
[1,0,1,0],
[0,1,0,1],
[1,0,1,0]]
teams = ["team a",
"team b",
"team c",
"team d" ]
main :: IO()
main = do
let games = map (\x -> (fst x, findOp teams $ snd x)) $ zip teams tab
putStrLn $ show games
结果:
[("team a",["team b","team d"]),("team b",["team a","team c"]),("team c",["team b","team d"]),("team d",["team a","team c"])]
...也许有人找到一个更好的问题标题! – st0ne
你的“数组”是*列表*,你可以举一个简单的例子来说明你想在这里做什么?什么是*绘制*矩阵?这与球队和对手有什么联系? – Carsten
这是一个图形问题,并且很简单,使用列表并不完全愚蠢 - 例如,没有随机访问。 – Carl