Форум программистов, компьютерный форум, киберфорум
Наши страницы
Prolog
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.63/16: Рейтинг темы: голосов - 16, средняя оценка - 4.63
time_to_go_on
0 / 0 / 1
Регистрация: 20.12.2010
Сообщений: 85
#1

Подключение базы данных

20.03.2012, 02:58. Просмотров 2901. Ответов 30
Метки нет (Все метки)

Есть файл формата rtf/dat(без разницы)

Внутри список транзакций(одна строка - одна транзакция), выглядит так:

b a
a c b
a h l u r
a

и так далее

вопрос такой: возможно ли такую базу подключить и работать с ней? без изменений
работаю в вижуал прологе 5.2

собственно до этого подключал базы, но там вся соль была в том, что там объявлялся домен типа:

шляпа(тото-тото, тото-тото)

а мне нужно без каких либо модификаций. Возможно ли такое?

Добавлено через 10 часов 4 минуты
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
domains
 file = f
 
predicates
 readfile(string)
 
 clauses
 readfile(F):-openread(f,F),
 readdevice(f),
 readln(S),
 write(S),
 closefile(f),
 readfile(F).
 
 
GOAL readfile("C:\\hm.dat").
считывает первую строку. Как считать все строки? Надо загнать в список? как?

Добавлено через 3 часа 47 минут
проблему решил через file_str, днём всё работает без проблем, в отличии от глубокой ночи

Добавлено через 31 минуту
вопрос всё-таки один остался : как эту переменную поместить в список? Точнее, как я понял, это будет список списков.

Добавлено через 10 часов 31 минуту
В общем всё сделал, но появился другой вопрос не по теме вообще: как подсчитать кол-во элемента(например буковки "a") в обычном списке? Вроде пустяк, а как сделать - не пойму
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2012, 02:58
Ответы с готовыми решениями:

VP базы данных
добавил вот это в код пустого проэкта, но теперь кидает ошибку "this domain was...

Динамические базы данных
Добрый день! Помогите ответить на 4 вопроса, с фактами в базе данных не...

Факты базы данных
Уважаемые знатоки Пролога! Подскажите, существует ли возможность работать с...

Динамические базы данных
Добрый день, скажите пожалуйста, каковы особенности динамических баз данных, и...

Открытие Базы Данных
Всем привет! Проблема такая, есть база данных "Base.ddb" (только этот файл и...

30
time_to_go_on
0 / 0 / 1
Регистрация: 20.12.2010
Сообщений: 85
22.03.2012, 17:54  [ТС] #21
В итоге прога пока что:
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
domains
  list=string*
  list_list=list*
  file     = infile ; outfile
 
predicates
  main 
  read_input(list_list)
  string_to_list(string,list)
  sort_list_list(list_list,list_list)
  sort_list(list,list)
  insert(string,list,list)
 
 
clauses
  main :-
       write("File to read:  "),
    readln(In),nl,
    openread(infile, In),              
    readdevice(infile),
           read_input(List_List),
    closefile(infile),
    sort_list_list(List_List,List_List),
    write(List_list).
 
  
  read_input([List|Tail]):-readln(S),string_to_list(S,List),read_input(Tail).
  read_input([]).
 
  string_to_list(S,[H|Tail]):-fronttoken(S,H,S1),string_to_list(S1,Tail).
  string_to_list(_,[]).
  
 
  sort_list_list([],[]).
  sort_list_list([H|Tail],[H1|Tail1]):-sort_list(H,H1),sort_list_list(Tail,Tail1).
 
  sort_list([],[]).
  sort_list([H|Tail],Ans):-sort_list(Tail,Tail1),insert(H,Tail1,Ans).
 
  insert(X,[H|Tail],[X,H|Tail]):-X<=H,!.
  insert(X,[H|Tail],[H|Tail1]):-insert(X,Tail,Tail1).
  insert(X,[],[X]).
 
goal main,nl.
Но на экран ничего не выводит. Где косяк? Файл загружаю такой

Всё, нашёл косяк! Работает! Теперь ещё подсчёт определённых букв подключить, как я писал раньше, т.е, допустим, найти сколько раз встречается буква 'a' в этом списке списков.
0
Грымзик
2477 / 1454 / 34
Регистрация: 14.09.2009
Сообщений: 2,742
22.03.2012, 18:51 #22
Ну тоже поиском воспользуйтесь, подсчет сколько раз элемент встречается наверняка был. Ну или наработки)
0
time_to_go_on
0 / 0 / 1
Регистрация: 20.12.2010
Сообщений: 85
23.03.2012, 14:52  [ТС] #23
Prolog
1
2
3
kol([A|B],A,X):-!,kol(B,A,Y), X = Y+1.
kol([_|B],C,X):-kol(B,C,X).
kol([],_,0).

Эта конструкция считает кол-во определённой буквы в списке, а как посчитать общее количество по всем спискам?

Добавлено через 11 часов 22 минуты
и ещё такой вопрос: как объединить эелементы одного списка? То есть список ["a","b"] превратить в ["ab"]
0
Грымзик
2477 / 1454 / 34
Регистрация: 14.09.2009
Сообщений: 2,742
23.03.2012, 18:27 #24
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
domains
  list=string*
 
predicates
concat_list(list,string).
 
clauses
concat_list([],"").
concat_list([H|Tail],S):-concat_list(Tail,S1),concat(H,S1,S).
 
goal
concat_list(["a","b","c"],A).
0
time_to_go_on
0 / 0 / 1
Регистрация: 20.12.2010
Сообщений: 85
24.03.2012, 19:40  [ТС] #25
Грымзик, вы меня игнорите в личке?)
0
aag
57 / 75 / 3
Регистрация: 03.11.2011
Сообщений: 137
25.03.2012, 00:48 #26
Гм... У нас этот "автур" тоже метёт...
0
time_to_go_on
0 / 0 / 1
Регистрация: 20.12.2010
Сообщений: 85
25.03.2012, 17:03  [ТС] #27
Цитата Сообщение от time_to_go_on Посмотреть сообщение
Prolog
1
2
3
kol([A|B],A,X):-!,kol(B,A,Y), X = Y+1.
kol([_|B],C,X):-kol(B,C,X).
kol([],_,0).

Эта конструкция считает кол-во определённой буквы в списке, а как посчитать общее количество по всем спискам?
Блин, так и не разобрался как организовать счётчик! Понимаю что надо X предавать в другой предикат, который будет считать сумму, но предикат написать так и не смог
0
Грымзик
2477 / 1454 / 34
Регистрация: 14.09.2009
Сообщений: 2,742
25.03.2012, 17:14 #28
time_to_go_on, честно говоря, Вы уже слишком много вопросов задаете. Тем более не конкретных, а просто "не понимаю". Предикат-счетчик очень простой, если Вы все еще не знаете как его впихнуть, то Вам надо азы пролога читать.
0
time_to_go_on
0 / 0 / 1
Регистрация: 20.12.2010
Сообщений: 85
25.03.2012, 17:38  [ТС] #29
Ну именно реализация написания счётчика для меня проблема. Я уже чуть ли не всю книгу Адаменко,Кучукова прочёл по несколько раз.

Добавлено через 17 минут
На visual prologe получилось так:

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
facts
single counter(integer).
domains
  list=string*
  list_list=list*
  
predicates
  kol(list,string,integer)
  showhead(list_list)
 
clauses
counter(0).
 
 kol([A|B],A,X):-!,kol(B,A,Y), X = Y+1,counter(I),J=I+1,assert(counter(J)).
 kol([_|B],C,X):-kol(B,C,X).
 kol([],_,0).
 
 showhead([H|T]):-kol(H,"a",Ch),nl,showhead(T).
  showhead([]).
  
 goal showhead([["a","b"],["a"]]),counter(J).
Тут счётчик очень похож на процедурные языки. А как быть с прологом обычным? хоть мне это уже и не особо важно, всё равно знать было хорошо, или что почитать, чтобы понять как сделать(азы это слишком расплывчиво сказано)?
0
Грымзик
2477 / 1454 / 34
Регистрация: 14.09.2009
Сообщений: 2,742
25.03.2012, 17:58 #30
Да что Вы программу то усложняете?!!!!!!!!! Зачем assert добавили? Вы вызываете kol(H,"a",Ch), но Ch не используйте, хотя это и есть количество встреч "a" в списке H.
0
time_to_go_on
0 / 0 / 1
Регистрация: 20.12.2010
Сообщений: 85
25.03.2012, 22:44  [ТС] #31
Цитата Сообщение от Грымзик Посмотреть сообщение
Да что Вы программу то усложняете?!!!!!!!!! Зачем assert добавили? Вы вызываете kol(H,"a",Ch), но Ch не используйте, хотя это и есть количество встреч "a" в списке H.
я знаю что такое Ch. Я не знаю как его проссумировать по всем спискам, а не по одному! Сделал топорно, да, но по-другому сделать не могу ибо не знаю как.

Переделал для использования Ch
Prolog
1
2
3
4
5
6
 kol([A|B],A,X):-!,kol(B,A,Y), X = Y+1.
 kol([_|B],C,X):-kol(B,C,X).
 kol([],_,0).
 
 showhead([H|T]):-kol(H,"a",Ch),nl,showhead(T),J=Ch+1,assert(counter(J)).
  showhead([]).
Добавлено через 4 часа 22 минуты
Вот прога по удалению буквы "a" во всех списках списка из файла. Букву можно заменить на любую. Выстрадал путём проб и ошибок сам, чему искренне рад. Может кому пригодится.

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
domains
list=string*
list_list=list* 
file     = infile ; outfile
 
predicates
del2(string,list,list).
del1(string,list_list,list_list). 
write_list_list(list_list).
write_list(list).
main.
read_input(list_list).
string_to_list(string,list).
clauses
 
read_input([List|Tail]):-readln(S),!,string_to_list(S,List),read_input(Tail).
read_input([]).
 
string_to_list(S,[H|Tail]):-fronttoken(S,H,S1),!,string_to_list(S1,Tail).
string_to_list(_,[]).
 
del1(_,[],[]).
del1(EL,[H|T],[H1|T1]):-del2(El,H,H1),del1(EL,T,T1).
del1(EL,[[]|T],[[]|T1]):-del1(EL,T,T1).
 
del2(_,[],[]).
del2(El,[El|T],T):-!.
del2(El,[X|T],[X|T1]):-del2(El,T,T1).
 
write_list_list([]).
write_list_list([H|Tail]):-write_list(H),nl,write_list_list(Tail).
 
write_list([]).
write_list([H|Tail]):-write(H," "),write_list(Tail). 
 
main:-F="C:\\hm.dat",openread(infile,F),readdevice(infile),read_input(A),closefile(infile),
        del1("a",A,B),
        openwrite(outfile,"C:\\lol22.dat"),writedevice(outfile),write_list_list(B),closefile(outfile).
goal
main,nl.
0
25.03.2012, 22:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2012, 22:44

Вывод данных и базы со списками
Добрый день. При решении задачи в TurboProlog возник вопрос как вывести данные...

Функция редактирования базы данных
Добрый день. Имеется программа, которая работает с базой данных(просмотр всех...

Не загружаются данные из базы данных
Добрый день, уважаемые форумчане. Реализую простую экспертную систему на турбо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru