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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
% vim:set syntax=prolog:
запомнить(Арг, Арг2, да):- assert(верно(Арг, Арг2)).
запомнить(Арг, Арг2, нет):- assert(ложно(Арг, Арг2)).
узнать(Арг, Арг2, Ответ):- write(Арг), write(" "), write(Арг2), read(Ответ), запомнить(Арг, Арг2, Ответ).
свойство(Арг, Арг2):- верно(Арг, Арг2), !.
свойство(Арг, Арг2):- not(ложно(Арг, Арг2)), узнать(Арг, Арг2, Ответ), Ответ=да.
нет_свойства(Арг, Арг2):- ложно(Арг, Арг2), !.
нет_свойства(Арг, Арг2):- not(верно(Арг, Арг2)), узнать(Арг, Арг2, Ответ), Ответ=нет.
это("подходит для обработки транзакций") :-
свойство("Поддерживает", "точность и согласованность данных"),
свойство("Поддерживает", "атомарные транзакции").
это("подходит для кэширования") :-
свойство("Хранение данных", "в оперативной памяти").
это("не требует проектирования БД") :-
свойство("Хранение данных", "в текстовом формате обмена данными"),
свойство("Хранение данных", "в неструктурированном виде").
это("реляционная БД") :-
свойство("Храние данных", "в строках и колонках"),
свойство("Использует", "язык SQL"),
это("подходит для обработки транзакций").
это("документо-ориентированная БД") :-
это("не требует проектирования БД"),
not(свойство("Использует", "язык SQL")),
свойство("Подходит для", "систем управления контентом").
это("key-value БД") :-
это("документо-ориентированная БД"),
это("подходит для кэширования").
это("графовая БД") :-
свойство("Хранение данных", "в виде узлов и соединений"),
свойство("Подходит для", "социальных сетей"),
свойство("Подходит для", "рекомендательных систем").
это("объектно-ориентированная БД") :-
свойство("Хранение данных", "в виде объектов с методами"),
свойство("Подходит для", "объекто-ориентированных приложений"),
свойство("Подходит для", "мультимедийных приложений").
это("OLAP БД") :- это("реляционная БД"), свойство("Данные хранятся", "по колонкам").
цель:- бд(Арг), !, writeln(Арг), очистить.
цель:- write("Не удалось подобрать СУБД"), очистить.
бд("Postgres") :- это("реляционная БД"), свойство("Данные хранятся", "построчно").
бд("Clickhouse") :- это("OLAP БД").
бд("Redis") :- это("key-value БД"), not(свойство("Является", "свободной для использования")).
бд("memcached") :- это("key-value БД").
бд("OrientDB") :- это("графовая БД").
бд("ObjectDB") :- это("объектно-ориентированная БД").
% лицензия("GNU GPL v3") :- свойство("Требует", "открыть исходный код"),
% свойство("Требует", "указать изменения относительно оригинала"),
% свойство("Требует", "включить лицензию в изменённый проект"),
% свойство("Не позволяет", "привлекать к ответственности"),
% свойство("Разрешает", "коммерческое использование").
% лицензия("GNU GPL v2") :- .
% лицензия("BSD 3-clause") :- .
% лицензия("MIT License") :- .
% лицензия("Apache License 2.0") :- .
% лицензия("Mozilla Public License") :- .
% лицензия("EULA") :- .
:- dynamic верно/2, ложно/2.
очистить:- retract(верно(_,_)), fail.
очистить:- retract(ложно(_,_)), fail.
% ?- halt.
|