mjg*_*ndo 2 haskell list-comprehension list
我想创建一个函数,给出两个列表(浮点数,但可以是任何东西)给出一个列表,其中包含从第一个列表中获取两个元素并将其放在最后一个中的所有组合以及前者的所有组合最后一个元素(现在有更多元素)并将它放回第一个元素.
对于每一个动作,它也会给出最大的移动值(在第二个动作中只有一个移动,即值).它应该在第一个列表为空时结束(没有第二个移动).
我不能指望任何人理解这一点,例如:
next [1,2,3,4] [] -> [(([1,2], [3,4], 4), ([1,2,3],[4],3)), (([1,2], [3,4], 4), ([1,2,4],[3],4)), (([1,3], [2,4], 4), ([1,2,3],[4],2)), (([1,3], [2,4], 4), ([1,3,4],[2],4)).....
next [1,2] [3,4] -> [(([], [1,2,3,4],2),)], ())
Run Code Online (Sandbox Code Playgroud)
到目前为止我所拥有的:
module Test where
next :: [Float] -> [Float] -> [(([Float],[Float], Float),([Float],[Float], Float))]
next [] _ = []
next (a:b:[]) s
|a>b = [([],a:b:s, a)]
|otherwise = [([],a:b:s, b)]
next d s = [([x,z], i:j:s, j), b | i <- d, j <- d, i < j, x <- d, z <- d, x < z, z /= i, z /= j, x /= z, x /= i, x /= j, b <- (back [x,z] i:j:s)]
where
back d s = [(i:d, [x,z], i) | i <- s, x <- s, z <- s, x < z, z /= i, x /= z]
Run Code Online (Sandbox Code Playgroud)
编译该代码会在|角色的第一个理解列表中返回错误.我有点理解back函数中的错误.为什么不编译?
理解语法是
[ <expression> | ... ]
Run Code Online (Sandbox Code Playgroud)
因为<expression>你有([x,z], i:j:s, j), b语法错误.你的意思是([x,z], i:j:s, b)?