Многоканальная древовидная конструкция от строки узла

Существует замечательный проблемный набор под названием Девяносто девять проблем Пролога. Проблемой P70 является та, упомянутая в заголовке. И вот большое решение для Пролога этой проблемы, которая проводит только 5 строк. Однако мое понимание Пролога ограничено.

Как это решение похоже в подобной 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).

5
задан Joel 3 November 2013 в 00:21
поделиться