Haskell 对于集合集合,deleteFindMin的替代方案是什么?
Data.Set.deleteFindMin在集合集合上使用的等效函数是什么? 我创建了以下类型: 类型SofSes=Set.Set.Set字符串 我只需要选择第一套,然后像这样返回: {{firstSet},{secondSet},…,{n-thSet}->{firstSet},{secondSet},…,{n-thSet} 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
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。此外,您应该在问题中包含完整的错误,而不仅仅是摘录。