swi prolog,如何读取txt.file的数据

时间:2011-09-03 04:55:37

标签: prolog

有人可以用我的文件阅读谓词来帮助我吗?

get_userinfo: write('\nEnter Name:'),
          readln(Name),
          write('\nEnter Gender:'),
          read(Gender),
          append('marriage.txt') ,
          write(personal(Name,Gender,Age,Attr)),nl,
          told.

这是我的文字档案:

personal(chong,male).
personal(jack,female).
personal(kk,male).

1 个答案:

答案 0 :(得分:2)

不确定问题出在哪里:阅读还是写作?看起来你有你需要的代码。我重新编写了一些内容,将其分解出来并提出了这个问题:

get_userinfo(personal(Name, Gender, Age, Attr)) :-
      write('Enter name: '),
      readln([Name|_]),
      write('Enter gender: '),
      readln([Gender|_]),
      write('Enter age: '),
      readln([Age|_]),
      write('Enter attr: '),
      readln([Attr|_]).

record_userinfo(Filename, Person) :-
      append(Filename),
      write(Person), nl,
      told.

从这里你可以像这样使用它:

:- get_userinfo(Person), record_userinfo('marriage.txt', Person).

如果您正在尝试阅读此内容,则可能只需consult[marriages]但您需要将其重命名为“.pl”结尾。

修改:有关阅读文件的更多信息。

在Prolog中,有阅读和咨询。读取与其他语言一样,您手动读取文件中的数据并进行处理。如果您的输入文件也是Prolog,您可以使用咨询;它相当于解析文件并将其中定义的事实和谓词添加到当前活动的会话中。例如,要查阅marriage.txt文件,您可以使用:

:- ['marriage.txt'].

现在您已经查阅了它,您可以使用数据库中的新事实执行查询:

?- ['marriages.txt'].
% marriages.txt compiled 0.00 sec, 1,328 bytes
true.

?- personal(X, Gender).
X = chong,
Gender = male ;
X = jack,
Gender = female ;
X = kk,
Gender = male.

?- personal(X, male).
X = chong ;
X = kk.

?- personal(chong, X).
X = male.

如果您想获得所有personal/2个事实的清单,您可以这样做:

?- setof(personal(X,Y), personal(X,Y), Qs).
Qs = [personal(chong, male), personal(jack, female), personal(kk, male)].