Новичок
Профиль
Группа: Участник
Сообщений: 1
Регистрация: 19.12.2009
Репутация: нет Всего: нет
|
Доброго времени суток! Подскажите, пожалуйста, как написать ограничение для БД на Прологе, которое находило бы ошибку, если в БД имеется две и более дублирующих записей? Собственно, сам имеющийся код: | Код |
predicates year_1937(string, real) year_1950(string, real) year_1958(string, real) measure(string, string) production(string, real, real, real, string) ogranicheniya(string, string) delta_5x(string, real) ogr(string)
clauses year_1937("coal", 45.2). year_1937("raw oil", 392.6). year_1937("electricity", 30.4). year_1937("iron ore", 601.9). year_1937("copper", 86.7). year_1937("sulfuric acid", 3.5). year_1937("cement", 6.1).
year_1950("coal", 38.5). year_1950("raw oil", 328.4). year_1950("electricity", 44.9). year_1950("iron ore", 825.7). year_1950("copper", 84.7). year_1950("sulfuric acid", 3.2). year_1950("cement", 4.4).
year_1958("coal", 49.7). year_1958("raw oil", 372). year_1958("electricity", 79.9). year_1958("iron ore", 2004). year_1958("copper", 123.7). year_1958("sulfuric acid", 3.8). year_1958("cement", 14.9).
measure("coal", "mln. t"). measure("raw oil", "th. t"). measure("electricity", "mlrd. kvt-h"). measure("iron ore", "th. t"). measure("copper", "th. t"). measure("sulfuric acid", "mln. t"). measure("cement", "mln. t").
production(Name, Year1937, Year1950, Year1958, Units):- year_1937(Name, Year1937), year_1950(Name, Year1950), year_1958(Name, Year1958), measure(Name, Units).
delta_5x(Name, Res):- year_1950(Name, X1), year_1958(Name, X2), Res=X2-X1.
ogranicheniya("value not defined for year 1937", X):- not(year_1937(X, _)). ogranicheniya("value not defined for year 1950", X):- not(year_1950(X, _)). ogranicheniya("value not defined for year 1958", X):- not(year_1958(X, _)). ogranicheniya("value not defined for measures", X):- not(measure(X, _)).
ogr("not unique key"):-year_1937(X, A), year_1937(Y, B), X=Y, A<>B. ogr("not unique key"):-year_1950(X, A), year_1950(Y, B), X=Y, A<>B. ogr("not unique key"):-year_1958(X, A), year_1958(Y, B), X=Y, A<>B. ogr("not unique key"):-measure(X, A), measure(Y, B), X=Y, A<>B.
|
|