我想请教您关于我想在Prolog中编码的程序的帮助。我想创建一个函数path(X,tree,Path)
,它从树的根中找到节点X的路径。基本上,我认为会有三个句子。
path(X, void, [])
,返回空列表,因为没有树path(X,tree(X,void,void),[X])
,返回包含树根元素的列表path(X,tree(Route,Left,Right),Path)
, ????????? 我相信有3个句子,我知道其中2个,但我不知道第三个是什么。谁能帮我?谢谢。
答案 0 :(得分:1)
你的第3条)应该在返回路径前添加当前节点,并在分支上递归
path(X, tree(Route, Left, Right), [Route|Path]) :-
path(X, Left, Path) ; path(X, Right, Path).
注意析取(;
)/ 2。该规则将首先尝试左,并在回溯时尝试右分支。
答案 1 :(得分:-1)
您的规则仅适用于此情况:
? - path(3,tree(1,tree(2,void,void),tree(3,void,void)),X)。 X = [1,3]。 - 树中有三个节点。
但如果我尝试在树中添加更多节点,则无效。看下面的例子: ? - 路径(7,树(1,树(2,4,5),树(3,6,7)),X)。 假。 答案必须是X = [1,3,7]。