2011-09-03 153 views
1

有人可以帮我用我的文件阅读谓词吗?swi prolog,如何读取txt.file的数据

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). 

回答

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)]. 
+0

我不知道如何从这个marriage.txt文件 – fewer

+0

'[“marriage.txt”]读取数据' –

+0

我明白了......我可以直接追踪程序中的数据吗? – fewer