【发布时间】:2010-07-28 09:50:48
【问题描述】:
有一个很棒的问题集叫做九十九Prolog Problems。问题 P70 是标题中提到的问题。这是一个很棒的 Prolog solution 这个问题只需要 5 行。但是,我对 Prolog 的理解是有限的。
这个解决方案在类似 C 的形式中看起来如何(没有可用的 itertools)?
根据要求编辑。我希望我没有侵犯版权。
问题:
BNF 中的语法:
tree ::= letter forest '^'
forest ::= | tree forest
使用差异列表的一个很好的解决方案:
tree(TS,T) :- atom(TS), !, atom_chars(TS,TL), tree_d(TL-[ ],T). % (+,?)
tree(TS,T) :- nonvar(T), tree_d(TL-[ ],T), atom_chars(TS,TL). % (?,+)
tree_d([X|F1]-T, t(X,F)) :- forest_d(F1-['^'|T],F).
forest_d(F-F,[ ]).
forest_d(F1-F3,[T|F]) :- tree_d(F1-F2,T), forest_d(F2-F3,F).
【问题讨论】:
-
您可以通过在此处实际复制问题定义等来帮助我们。尽可能将内容引入 stackoverflow。
标签: algorithm prolog multiway-tree