haskell 确定空列表是否为子句集的一部分的函数

kuuvgm7e  于 2023-03-19  发布在  其他
关注(0)|答案(1)|浏览(125)

理论上,如果一组子句包含空列表([]),我的函数应该能够返回True或False,我实际上定义了下一个数据类型:

data Literal = V String | NotV String deriving Eq
type Clause = [Literal]
type Interpretacion = [( String , Bool ) ]
type State = ( Interpretation , [ Clause ])

对于函数,我是这样做的:

conflict :: State -> Bool
    | [] `elem` xs = True
    | otherwise = False

但我真的认为这还不够,我的下一个工作是做另一个函数,确定模型搜索是否成功,(这发生在子句集为空时),我认为我必须使用相同的(State -〉Bool)使用上面的函数,但如果第一个函数不工作,第二个也不能工作。
我最大的问题是:你认为我需要做什么?任何评论都会对我有很大的帮助,我有点迷失了。我的工作是关于DPLL算法的转换规则,一旦我有了,我会在Github分享给新的程序员。

lymnna71

lymnna711#

我想我在另一个网站上实现DPLL算法时也遇到过同样的问题,也许您可以尝试使用这样的函数:

isEmptyState :: State -> Bool
isEmptyState = null . assignments

对于下一个函数,可以实现一个helper函数来检查第一个函数,另一个helper函数返回第一个函数的结果,如下所示:

unassigned :: State -> [Var]
unassigned (State(_,us)) = us

complete :: State -> Bool
complete = null . unassigned

我认为你试图用第一个函数来达到的目的是,当你编译的时候,你可以得到这样的东西:

ghci >success ([( p , True ) , (q , False ) ] , []) ▷ True

相关问题