Не уверен, где проблема: чтение или запись? Похоже, у вас есть код, который вам нужен. Я переписал это, чтобы отделить вещи немного больше и придумал это:
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
it: [marriages]
, но вам нужно переименовать его, чтобы оно заканчивалось на '.pl'.
Редактировать : дополнительная информация о чтении файлов.
В Прологе есть чтение и консультации. Чтение, как и на других языках, вы вручную считываете данные из файла и обрабатываете их. Консалтинг - это то, что вы можете использовать в тех случаях, когда ваш входной файл также является Прологом; это сводится к разбору файла и добавлению фактов и предикатов, определенных в нем, в текущий активный сеанс. Например, чтобы просмотреть файл 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)].