Haskell列表理解编译错误

时间:2015-06-11 06:38:44

标签: list haskell list-comprehension

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

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

我不能指望任何人理解这一点,例如:

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函数中的错误。为什么不编译?

1 个答案:

答案 0 :(得分:5)

理解语法是

<?xml version="1.0" encoding="utf-8"?>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/sky_blue"
    android:orientation="vertical" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:padding="8dp" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:text="Student Projects : "
            android:textColor="#ffffff"
            android:textSize="20sp"
            android:textStyle="bold" />
    </RelativeLayout>

    <ListView
        android:id="@+id/lvProjects"
        android:layout_width="match_parent"
        android:layout_height="395dp"
        android:cacheColorHint="#00000000" >
    </ListView>

</LinearLayout>

对于[ <expression> | ... ] ,你有<expression>,这在语法上是错误的。您的意思是([x,z], i:j:s, j), b吗?