swi пролог, как читать данные для txt.file - PullRequest
1 голос
/ 03 сентября 2011

Может ли кто-нибудь помочь мне с моим предикатом чтения файла?

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 Ответ

2 голосов
/ 03 сентября 2011

Не уверен, где проблема: чтение или запись? Похоже, у вас есть код, который вам нужен. Я переписал это, чтобы отделить вещи немного больше и придумал это:

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)].
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...