2011-09-03 155 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