Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.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
Haskell 对于集合集合,deleteFindMin的替代方案是什么?_Haskell_Set - Fatal编程技术网

Haskell 对于集合集合,deleteFindMin的替代方案是什么?

Haskell 对于集合集合,deleteFindMin的替代方案是什么?,haskell,set,Haskell,Set,Data.Set.deleteFindMin在集合集合上使用的等效函数是什么? 我创建了以下类型: 类型SofSes=Set.Set.Set字符串 我只需要选择第一套,然后像这样返回: {{firstSet},{secondSet},…,{n-thSet}->{firstSet},{secondSet},…,{n-thSet} deleteFindMin的错误消息: Couldn't match type `Set.Set String' with `[t0]' Expected typ

Data.Set.deleteFindMin在集合集合上使用的等效函数是什么? 我创建了以下类型:

类型SofSes=Set.Set.Set字符串

我只需要选择第一套,然后像这样返回:

{{firstSet},{secondSet},…,{n-thSet}->{firstSet},{secondSet},…,{n-thSet}

deleteFindMin的错误消息:

Couldn't match type `Set.Set String' with `[t0]'
    Expected type: Set.Set [t0]
      Actual type: Set.Set (Set.Set String)
我的代码:

reduce ts   
    | (Set.null (setW ts))==False = do                                   
        reduce (firstFor (Set.deleteFindMin (setW ts)) (getAlphabet ts)                                              
    | otherwise = ts


firstFor (a,w) (c:cs) ts                                                                   
    | null(c:cs)==False = do 
        secondFor (fromCtoA a c ts) ts                                            
    | otherwise =  ts

fromCtoA (a:as) c ts = ts  --function that is not finished yet (TODO)    

data KAutomat = KA
    { states :: Set.Set String
    , start :: KState
    , final :: Set.Set String
    , trans :: [Transition]
    , setW :: Set.Set (Set.Set String)
    , setP :: Set.Set (Set.Set String)
    } deriving (Eq)

变量ts的类型是KAutomat。

我可以为您强调代码中的一个冲突,尽管根据给出的信息,可能无法说明正确的修复方法。我在你的问题上留下了一条评论,描述了我希望你所做的努力,这将使提供更具体的帮助成为可能

这就是冲突。你写

fromCtoA (a:as) c ts = ts
从中,由于a:as只能是一个列表,我们得出结论,fromCtoA必须将列表作为其第一个参数。你还写道:

reduce ... = ... firstFor (Set.deleteFindMin (setW ts)) ...
firstFor (a,w) ... = ... fromCtoA a ...

由于setW返回一个Set字符串,deleteFindMin调用将返回一个Set字符串,Set Set字符串,因此a将是一个Set字符串,从中我们得出结论,fromCtoA必须接受Set字符串作为其第一个参数。这与我们之前的结论不一致,即fromCtoA只能接受列表。

集合中包含集合的事实是不相关的。但是您可能应该使用deleteFindMin来代替部分deleteFindMin。deleteFindMin将为您提供一个集合和其余集合。小心“first set”的含义,因为typeclass提供的排序不一定会给你想要的顺序。但也许你真正想要的是折叠。@DanRobertson我其实不在乎顺序……我需要有pair-firstSet,其他设置,如上所述。你必须提供一个;您当前的尝试不符合此标准,因为它不完整。许多标识符不在范围内,不可验证,无法解析,更不用说在类型检查中获得足够多的错误,而且可能不是最小的。我怀疑产生错误需要如此复杂的KAutomat。此外,您应该在问题中包含完整的错误,而不仅仅是摘录。