Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List Haskell列表重复元素_List_Haskell - Fatal编程技术网

List Haskell列表重复元素

List Haskell列表重复元素,list,haskell,List,Haskell,我试图做一个函数,告诉我,如果在元组列表中,如果元组的第一个元素在另一个元组中是相同的,那么元组的其他元素也必须相等,如果不相等,则返回False main> istup [(1,2,3,4,5),(1,2,3,4,5),(1,4,5,6,2),(4,2,1,5,6)] >>> False main> istup [(1,2,3,4,5),(1,2,3,4,5),(4,2,1,5,6),(4,2,1,5,6)] >>> True 这就是我所拥有的

我试图做一个函数,告诉我,如果在元组列表中,如果元组的第一个元素在另一个元组中是相同的,那么元组的其他元素也必须相等,如果不相等,则返回
False

main> istup [(1,2,3,4,5),(1,2,3,4,5),(1,4,5,6,2),(4,2,1,5,6)]
>>> False
main> istup [(1,2,3,4,5),(1,2,3,4,5),(4,2,1,5,6),(4,2,1,5,6)]
>>> True
这就是我所拥有的:

type Tuple = (a,b,c,d,e)

istup :: [Tuple] -> Bool
istup x = length (nub x) == length x

只要写下你的描述作为Haskell代码。以下是您的条件:

  • 对于每一对元素,都要检查一些条件
  • 您可以定义条件
  • 写下“所有对”的含义:
这是生成的代码:

istup :: [(Int,Int,Int,Int,Int)] -> Bool
istup x = all ok (allPairs x)

ok t1 t2 = if fst5 t1 == fst5 t2 then t1 == t2 else True
    where fst5 (a,_,_,_,_) = a

allPairs x = [(a,b) | a <- x , b <- x]
istup::[(Int,Int,Int,Int,Int)]->Bool
istup x=所有正常(所有对x)
ok t1 t2=如果fst5 t1==fst5 t2,则t1==t2否则为真
式中,fst5(a,,,,,,,=a

所有对x=[(a,b)| a只需将您的描述写下为Haskell代码。以下是您的条件:

  • 对于每一对元素,都要检查一些条件
  • 您可以定义条件
  • 写下“所有对”的含义:
这是生成的代码:

istup :: [(Int,Int,Int,Int,Int)] -> Bool
istup x = all ok (allPairs x)

ok t1 t2 = if fst5 t1 == fst5 t2 then t1 == t2 else True
    where fst5 (a,_,_,_,_) = a

allPairs x = [(a,b) | a <- x , b <- x]
istup::[(Int,Int,Int,Int,Int)]->Bool
istup x=所有正常(所有对x)
ok t1 t2=如果fst5 t1==fst5 t2,则t1==t2否则为真
式中,fst5(a,,,,,,,=a

allPairs x=[(a,b)| a让我们将任务拆分为子任务

1) 我们需要将列表拆分为具有相同头部的元组列表,这可以使用Data.list.groupBy完成,它使用一个函数来确定是否将两个项放在同一个子列表中:

 import Data.List
 import Data.Function (on)
 splitByHead = groupBy ((==) `on` fst5)    -- the function is same as (\a b -> fst5 a == fst5 b)
    where fst5 (a,_,_,_,_) = a
2) 然后我们需要检查子列表中的所有项目是否相等(可以查看不同项目列表的长度,这是通过
nub
获得的):

3) 综上所述:

 import Data.List
 import Data.Function (on)

 istup = all ((1 == ) . length . nub) . groupBy ((==) `on` (\(a,_,_,_,_) -> a))

让我们将任务拆分为子任务

1) 我们需要将列表拆分为具有相同头部的元组列表,这可以使用Data.list.groupBy完成,它使用一个函数来确定是否将两个项放在同一个子列表中:

 import Data.List
 import Data.Function (on)
 splitByHead = groupBy ((==) `on` fst5)    -- the function is same as (\a b -> fst5 a == fst5 b)
    where fst5 (a,_,_,_,_) = a
2) 然后我们需要检查子列表中的所有项目是否相等(可以查看不同项目列表的长度,这是通过
nub
获得的):

3) 综上所述:

 import Data.List
 import Data.Function (on)

 istup = all ((1 == ) . length . nub) . groupBy ((==) `on` (\(a,_,_,_,_) -> a))

如果有一个元组有一个给定的头,它算是真的吗?你的意思是要检查
头列表
是否是
尾列表
的元素?如果有一个元组有一个给定的头,它算是真的吗?你的意思是要检查
头列表
是否是
尾列表
的元素?