我必须阅读 results.txt ,其中包含一棵树,其中包括:
根 ( S( NP(..) NV(..) . . ) )
以及其他不适合我的事情,
如何在列表中仅插入“ROOT (...)”?
谢谢
尽管您的问题含糊不清,但这里有一段工作代码。您需要根据实际需求对其进行调整
tree(Tree) -->
sym(Functor), "(", arguments(Args), ")",
{Tree =.. [Functor|Args]}.
sym(S) -->
[F], { sym_char(F) },
sym_rest(Cs),
!, { atom_codes(S, [F|Cs]) }.
sym_rest([C|Cs]) -->
[C], { sym_char(C) },
sym_rest(Cs).
sym_rest([]) --> [].
sym_char(F) :- F >= 0'A, F =< 0'Z .
arguments([A|Args]) --> argument(A), ",", arguments(Args).
arguments([A]) --> argument(A).
argument(A) --> tree(A) ; sym(A).
... --> [] ; [_], ... .
在返回的术语列表中与phrase_from_file /2 和 cons 一起使用,这里我展示了一个使用 phrase/2 的测试。
?- phrase((..., tree(T), ...), " -- garbage -- A(X,Y,Z(A,B,C)) -- garbage --").
T = 'A'('X', 'Y', 'Z'('A', 'B', 'C')) .