【问题标题】:Trim the tree at the specified depth. In Prolog在指定深度修剪树。在序言中
【发布时间】:2018-06-15 08:37:11
【问题描述】:

参数:任意二叉树;必要的深度;结果树。

结果:

?- 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 
?-

有人可以帮我吗?

【问题讨论】:

  • 请在这里表现出一些努力。如果您根本不了解 Prolog,那么请阅读一本好的教程或教科书。仅仅陈述一个问题并期望有人给你一个完整的、有效的答案不是这个网站的目的。

标签: tree prolog binary-tree trim depth


【解决方案1】:

让我们重新排列你的例子:

?- 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).

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-11
    • 2015-10-15
    • 1970-01-01
    • 2018-04-02
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    相关资源
    最近更新 更多