答案 0 :(得分:1)
将另一个参数添加到war
函数。
war :: ([Int],[Int]) -> ([Int],[Int]) -> ([Int],[Int])
war (px,py) (x,y) = let
[(xp',(xc:xr)),(yp',(yc:yr))] = map (splitAt 3) [x,y]
in case xc `compare` yc of
GT -> (xr ++ px ++ xp' ++ [xc] ++ py ++ yp' ++ [yc], yr)
LT -> (xr, yr ++ py ++ yp' ++ [yc] ++ px ++ xp' ++ [xc])
EQ -> war (px ++ xp' ++ [xc], py ++ yp' ++ [yc]) (xr,yr)
来自standardRound
函数的调用:第一个参数应该是([],[])
,在递归调用中它应该是卡片列表。
答案 1 :(得分:1)
您可以使用let ... in
提取元组的值
| otherwise = let (newxs,newys) = war (drop 4 xs, drop 4 ys) in
(take 3 xs ++ newxs, take 3 ys ++ newys)
以便您可以返回修改后的版本。无论你喜欢,都可以在之前或之后添加掉落的卡片。