参数:任意二叉树;必要的深度;结果树。
结果:
?- pred(s(f(b(m,k),a),t(a,g)),2,X).
X = s(f,t) yes
?- pred(s(f(b(m,k),a),t(a,g)),3,X).
X = s(f(b,a),t(a,g)) yes
?-
有人可以帮我吗?
答案 0 :(得分:0)
让我们重新安排你的例子:
?- pred( s( f(b(m,k),a), t(a,g)), 3, X).
X = s(f(b,a),t(a,g)) yes
?- pred( s( f(b(m,k),a), t(a,g)), 2, X).
X = s(f,t) yes
?- pred( s( f(b(m,k),a), t(a,g)), 1, X).
X = s yes
?- pred( s( f(b(m,k),a), t(a,g)), 0, X).
no
现在很清楚需要做什么,不是吗?
这个难题的另一个部分是所谓的“univ”谓词,=..
,
9 ?- s( f(b(m,k),a), t(a,g)) =.. [A, B, C].
A = s,
B = f(b(m, k), a),
C = t(a, g).
10 ?- X =.. [s, f(b(m,k),a), t(a,g)].
X = s(f(b(m, k), a), t(a, g)).
11 ?- X =.. [s, f(b,a), t(a,g)].
X = s(f(b, a), t(a, g)).
12 ?- X =.. [s, f, t].
X = s(f, t).
13 ?- X =.. [s].
X = s.
14 ?- s =.. X.
X = [s].
这就是你可以拆分数据并重新构建它的方法。
最后,您需要使用递归:
recursion( In, Out) :-
base_relation( In, Out).
recursion( In, Out) :-
constituents( In, SelfSimilarParts, LeftOvers),
maplist( recursion, SelfSimilarParts, InterimResults),
constituents( Out, InterimResults, LeftOvers).