【发布时间】:2015-10-17 12:32:08
【问题描述】:
我在训练prolog练习时遇到了一些问题,下面的问题是,
谓词定义了树的含义,可以用来测试一个词是否是树:
tree(t(L,R)) :- tree(L), tree(R).
tree(T) :- T\=t(_ , _).
通过使用此谓词,您可以在树中找到一个元素(称为叶子):
leaf(t(L,R),E) :- leaf(L,E); leaf(R,E).
leaf(T,T) :- T\=t(_ , _).
所以这里有两个问题,首先是编写谓词elements/2,它会生成一个元素列表,因为它们在第一个参数中以从左到右的顺序在树的叶子中找到!
第二个是写一个谓词相同的content/2,当两棵树以相同的顺序包含相同的元素时,它就成功了!重复很重要。
希望能得到擅长prolog的人能帮帮我,非常感谢。
【问题讨论】:
-
您是否尝试过编写您想要的这些谓词?如果你在运行时检查
leaf/2的所有结果,你观察到结果的顺序是什么? -
使用更简洁的表示!照原样,您声明“与
t(_,_)无法统一的所有内容都是有效的树/叶”。 -
imo,elements/2 只是 findall/3,而 content/2 只是 elements/2 之间的连接
-
elements(Tree, Elements) :- findall( E, leaf(Tree, E), Elements ).和content(Tree1, Tree2) :- elements(Tree1, E), elements(Tree2, E).。 -
嗨,潜伏者,谢谢,我认为这是最终答案。