【问题标题】:Haskell list comprehension compilation errorHaskell 列表理解编译错误
【发布时间】:2015-06-11 06:38:44
【问题描述】:

我想创建一个函数,给定两个列表(浮点数,但可以是任何东西)给出一个列表,其中包含从第一个列表中获取两个元素并将其放入最后一个列表的所有组合以及前者的所有组合将最后一个元素(现在有更多元素)放回第一个元素。

对于每一个动作,它也给出了移动的最大值(在第二个动作中只有一个移动,即值)。当第一个列表为空时,它应该全部结束(不会有第二个动作)。

我不能指望任何人都明白这一点,例子:

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),)], ())

到目前为止我所拥有的:

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]

编译该代码会在第一个理解列表的| 字符处返回错误。我有点理解back 函数中的错误。为什么编译不出来?

【问题讨论】:

    标签: list haskell list-comprehension


    【解决方案1】:

    理解语法是

    [ <expression> | ... ]
    

    对于&lt;expression&gt;,你有([x,z], i:j:s, j), b,这在语法上是错误的。你是说([x,z], i:j:s, b)吗?

    【讨论】:

    • 现在出现了很多其他编译错误,但至少它们看起来更详细一些。
    猜你喜欢
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多