Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/22: Рейтинг темы: голосов - 22, средняя оценка - 4.77
 Аватар для time_to_go_on
1 / 1 / 1
Регистрация: 20.12.2010
Сообщений: 85

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

20.03.2012, 02:58. Показов 4890. Ответов 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.03.2012, 02:58
Ответы с готовыми решениями:

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

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

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

30
 Аватар для time_to_go_on
1 / 1 / 1
Регистрация: 20.12.2010
Сообщений: 85
22.03.2012, 17:54  [ТС]
Студворк — интернет-сервис помощи студентам
В итоге прога пока что:
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
 Аватар для Грымзик
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
22.03.2012, 18:51
Ну тоже поиском воспользуйтесь, подсчет сколько раз элемент встречается наверняка был. Ну или наработки)
0
 Аватар для time_to_go_on
1 / 1 / 1
Регистрация: 20.12.2010
Сообщений: 85
23.03.2012, 14:52  [ТС]
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
 Аватар для Грымзик
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
23.03.2012, 18:27
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
1 / 1 / 1
Регистрация: 20.12.2010
Сообщений: 85
24.03.2012, 19:40  [ТС]
Грымзик, вы меня игнорите в личке?)
0
 Аватар для aag
71 / 75 / 3
Регистрация: 03.11.2011
Сообщений: 136
25.03.2012, 00:48
Гм... У нас этот "автур" тоже метёт...
0
 Аватар для time_to_go_on
1 / 1 / 1
Регистрация: 20.12.2010
Сообщений: 85
25.03.2012, 17:03  [ТС]
Цитата Сообщение от 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
 Аватар для Грымзик
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
25.03.2012, 17:14
time_to_go_on, честно говоря, Вы уже слишком много вопросов задаете. Тем более не конкретных, а просто "не понимаю". Предикат-счетчик очень простой, если Вы все еще не знаете как его впихнуть, то Вам надо азы пролога читать.
0
 Аватар для time_to_go_on
1 / 1 / 1
Регистрация: 20.12.2010
Сообщений: 85
25.03.2012, 17:38  [ТС]
Ну именно реализация написания счётчика для меня проблема. Я уже чуть ли не всю книгу Адаменко,Кучукова прочёл по несколько раз.

Добавлено через 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
 Аватар для Грымзик
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
25.03.2012, 17:58
Да что Вы программу то усложняете?!!!!!!!!! Зачем assert добавили? Вы вызываете kol(H,"a",Ch), но Ch не используйте, хотя это и есть количество встреч "a" в списке H.
0
 Аватар для time_to_go_on
1 / 1 / 1
Регистрация: 20.12.2010
Сообщений: 85
25.03.2012, 22:44  [ТС]
Цитата Сообщение от Грымзик Посмотреть сообщение
Да что Вы программу то усложняете?!!!!!!!!! Зачем 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.03.2012, 22:44

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru