如何在prolog中读取文件并将其放入列表中?

时间:2013-02-07 11:49:00

标签: file list prolog

我必须阅读包含由以下内容组成的树的results.txt:

ROOT(  S(    NP(..)    NV(..)   。   。  ) )

以及其他不能为我服务的事情,

如何在列表中仅插入“ROOT(...)”?

感谢

1 个答案:

答案 0 :(得分:1)

尽管你的问题很模糊,但这里有一段工作代码。您需要根据实际需求进行调整

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并在列表中使用返回的术语,这里我使用短语/ 2显示测试。

?- phrase((..., tree(T), ...), " -- garbage -- A(X,Y,Z(A,B,C)) -- garbage --").
T = 'A'('X', 'Y', 'Z'('A', 'B', 'C')) .