summaryrefslogtreecommitdiff
path: root/task7.pro
blob: 9a50a073866571eaf194e593da95f21a0526f6f2 (plain)
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.