Commit 4c419592 authored by Mateusz Ślażyński's avatar Mateusz Ślażyński
Browse files

Adds type info to constants (constants may be of more than one type!).

Also updates headers to contain info in atomic facts instead of lists.
Showing with 46 additions and 41 deletions
+46 -41
......@@ -21,11 +21,11 @@
% Begin
:- dynamic(constant_definition/2).
:- dynamic(range_definition/2).
:- dynamic(body_predicates/1).
:- dynamic(available_integers/1).
:- dynamic(available_ranges/1).
:- dynamic(available_variables/1).
:- dynamic(available_constraints/1).
:- dynamic(body_predicate/1).
:- dynamic(available_integer/1).
:- dynamic(available_range/1).
:- dynamic(available_variable/1).
:- dynamic(available_constraint/1).
:- dynamic(type_uses/2).
:- dynamic(type_of/2).
:- dynamic(constant/2).
......@@ -59,11 +59,11 @@
header_predicate(type_uses/2).
header_predicate(type_of/2).
header_predicate(available_integers/1).
header_predicate(available_ranges/1).
header_predicate(available_variables/1).
header_predicate(available_constraints/1).
header_predicate(body_predicates/1).
header_predicate(available_integer/1).
header_predicate(available_range/1).
header_predicate(available_variable/1).
header_predicate(available_constraint/1).
header_predicate(body_predicate/1).
header_predicate(constant_definition/2).
header_predicate(range_definition/2).
header_predicate(reified_constraint/3).
......@@ -73,11 +73,11 @@ body_predicate(X) :-
\+ header_predicate(X).
dynamic_predicate(type_uses/2, public).
dynamic_predicate(type_of/2, public).
dynamic_predicate(available_integers/1, public).
dynamic_predicate(available_ranges/1, public).
dynamic_predicate(available_variables/1, public).
dynamic_predicate(available_constraints/1, public).
dynamic_predicate(body_predicates/1, public).
dynamic_predicate(available_integer/1, public).
dynamic_predicate(available_range/1, public).
dynamic_predicate(available_variable/1, public).
dynamic_predicate(available_constraint/1, public).
dynamic_predicate(body_predicate/1, public).
dynamic_predicate(constant_definition/2, public).
dynamic_predicate(range_definition/2, public).
dynamic_predicate(constant/2, public).
......@@ -151,36 +151,25 @@ finalize() :-
compile_predicates_list() :-
ndl_namespace(Namespace),
findall(Predicate/Arity,
(
forall((
body_predicate(Predicate/Arity),
functor(Check, Predicate, Arity),
once(Namespace:Check)
),
BodyPredicates
remember(body_predicate(Predicate/Arity))
),
findall(ConstInteger,
(
forall((
Namespace:constant_definition(ConstInteger, Value),
Value \= _.._
),
ConstIntegers
Value \= _.._),
remember(available_integer(ConstInteger))
),
findall(ConstRange, Namespace:constant_definition(ConstRange, _.._), ConstRanges),
findall(VariableName/Arity,
(
ndl_variable_definition(VariableName, Indexing, _),
length(Indexing, Arity)
),
Variables),
findall(ConstRange, Namespace:constant_definition(ConstRange, _.._), ConstRanges),
findall(ConstraintName, ndl_constraint_pairs(ConstraintName, _), Constraints),
remember(body_predicates(BodyPredicates)),
remember(available_integers(ConstIntegers)),
remember(available_ranges(ConstRanges)),
remember(available_variables(Variables)),
remember(available_constraints(Constraints)).
forall(Namespace:constant_definition(ConstRange, _.._),
remember(available_range(ConstRange))),
forall((ndl_variable_definition(VariableName, Indexing, _),
length(Indexing, Arity)),
remember(available_variable(VariableName/Arity))),
forall(ndl_constraint_pairs(ConstraintName, _),
remember(available_constraint(ConstraintName))).
compile_type_uses() :-
\+ ndl_type_use(_, _), !.
......@@ -189,7 +178,24 @@ compile_type_uses() :-
forall(member(T, Types), (
setof(U, ndl_type_use(T, U), Uses),
remember(type_uses(T, Uses)))
).
),
compile_const_types().
compile_const_types() :-
forall(type_uses(const(C), Uses), (
uses_to_types(Uses, TypesList),
sort(TypesList, TypesSet),
forall(member(Type, TypesSet),
remember(type_of(const(C), Type))
)
)).
uses_to_types([], []).
uses_to_types([H|T],[NH|NT]) :-
type_of(H, NH), !,
uses_to_types(T, NT).
uses_to_types([_|T],NT) :-
uses_to_types(T, NT).
compile_reified_constraints() :-
forall(reified(Name), (
......
......@@ -343,8 +343,7 @@ p_query_term(OC, NC, OS, OS, T, CT) :-
selector(variable, Selector),
CT =.. [Selector, Name | Args],
ndl_namespace(N),
N:available_variables(Vars),
member(Name/Indexing, Vars),
N:available_variable(Name/Indexing),
length(Args, Arity),
Arity is Indexing + 1,
ndl_typing_add_variable(Name, Args, OC, NC).
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment