Prolog没有写入文件

时间:2015-04-06 12:28:11

标签: file-io prolog

command(A) :-
   open('tree.txt',write,Stream),
   (  s(X,A,[]),
      write(Stream,X),
      fail
   ;  true
   ),
   close(Stream).

在上面的代码中,我试图将句子的结果语法树写入名为tree.txt的文件中。 s(x,A,[])表示我正在调用的句子,其中X是语法树。我在SWI Prolog中运行语法时调用此谓词并获得" true"返回值,但语法树没有写入文本文件(与我的语法文件在同一目录中)。

整个语法文件如下(如有必要):

command(A) :- open('tree.txt',write,Stream),
      (s(X,A,[]) , write(Stream,X), fail;true),
      close(Stream).
% writer(X) :- open('tree.txt', write,Stream),
%        write(Stream,X),
%        close(Stream).
s(s(X)) --> cmd(X).
s(s(X)) --> assertion(X).
s(s(X)) --> qstn(X).
qstn(qstn(qw,subject,X)) --> qw, subject, np(X).
qstn(qstn(qw,is,X)) --> qw, [is], np(X).
assertion(assertion(subject,is,X)) --> subject, [is], np(X).
cmd(cmd(X,Y)) --> v(X), np(Y).
np(np(det,X)) --> det, n(X).
np(np(X)) --> n(X).
np(np(adj,X)) --> adj, n(X).
n(n(A)) --> [A], {lex(A,n)}.
v(v(A)) --> [A], {lex(A,v)}.
qw --> [A], {lex(A,qw)}.
det --> [A], {lex(A,det)}.
adj --> [A], {lex(A,adj)}.
subject --> [A], {lex(A,subject)}.

lex(this,subject).
lex(that,subject).
lex(build, v).
lex(move, v).
lex(walk, v).
lex(is,v).
lex(block, n).
lex(structure,n).
lex(where, qw).
lex(is, qw).
lex(what, qw).
lex(the, det).
lex(a, det).
lex(at, conj).
lex(on, conj).

" writer / 1"函数是写入文件的早期尝试。 如有必要,我可以提供更多信息,并且我已经尝试过在另一个类似问题中提出的建议(没有工作)。 有人能帮助我吗?

0 个答案:

没有答案