我正在寻找在python中表示prolog事实和规则库的最佳数据结构,以便稍后易于操作,例如:
parent(abraham,ismael).
parent(abraham,isaac).
parent(isaac,iacob).
grandfather(B,N):- parent(B,P),parent(P,N).是像这样的嵌套列表吗:
base=[["parent","abraham","ismael"],["parent","abraham","isaac"],["parent","isaac","iacob"]]或者使用字典:
base={"parent": ("abraham","ismael") ,"parent": ("abraham","isaac"), "parent":("isaac","iacob") }或者,在这种情况下,你有没有什么最好的表示方法。
PS:我的意思是:最简单,最容易,最灵活的方式。
发布于 2017-03-23 22:38:59
您可以直接在prolog中使用类似python的文字dict语法。
解决方案
{
'parent':
{
'name_of_parent': 'abraham' ,
'name_of_child': 'isaac'
}
}
.
{
'parent':
{
'name_of_parent': 'isaac' ,
'name_of_child': 'iacob'
}
}
.
{
'grandfather':
{
'name_of_grandfather': __B__ ,
'name_of_grandchild': __N__
}
}
:-
(
{
'parent':
{
'name_of_parent': __B__ ,
'name_of_child': __P__
}
}
,
{
'parent':
{
'name_of_parent': __P__ ,
'name_of_child': __N__
}
}
)
.示例查询
?-
{
'grandfather':
{
'name_of_grandfather': __B__ ,
'name_of_grandchild': __N__
}
}
.
__B__ = abraham,
__N__ = iacob ;
false.注意事项
可能不会为您的:实现自动定义prolog运算符。如果由于:而出现语法错误,请将以下代码放在文件的顶部:
:- op((10'1),(yfx),(:)) .https://stackoverflow.com/questions/42975993
复制相似问题