我正在尝试构建一个 DCG,它可以识别与此形式匹配的所有列表:a^n b^2m c^2m d^n
.
我写下了以下规则:
s --> [].
s --> ad.
ad --> a, ad, d.
ad --> bc.
bc --> b, b, bc, c, c.
bc --> [].
a --> [a].
b --> [b].
c --> [c].
d --> [d].
当我尝试使用这些规范评估字符串时,例如列表[a,b,b,c,c,d]
, 有用。但是当我尝试评估查询时phrase(s, X)
这样我就可以看到该语法返回的所有可能的字符串,它会无限循环。
我构建 DCG 的方式有问题吗?
您可以通过迭代加深来公平地枚举字符串:
?- length(Ls, _), phrase(s, Ls).
Ls = [] ;
Ls = [] ;
Ls = [a, d] ;
Ls = [a, a, d, d] ;
Ls = [b, b, c, c] ;
etc.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)