不确定问题出在哪里:阅读还是写作?看起来你有你需要的代码。我重写了它以将事情分开一点并想出了这个:
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)].