Use foliage traits

This commit is contained in:
Patrick Lühne 2020-04-17 04:10:23 +02:00
parent e6cf79ad1e
commit 07322f041c
Signed by: patrick
GPG Key ID: 05F3611E97A70ABF
5 changed files with 15 additions and 27 deletions

View File

@ -21,15 +21,3 @@ pub(crate) trait VariableDeclarationID
fn variable_declaration_id(&self, fn variable_declaration_id(&self,
variable_declaration: &std::rc::Rc<foliage::VariableDeclaration>) -> usize; variable_declaration: &std::rc::Rc<foliage::VariableDeclaration>) -> usize;
} }
pub(crate) trait GetOrCreateFunctionDeclaration
{
fn get_or_create_function_declaration(&self, name: &str, arity: usize)
-> std::rc::Rc<foliage::FunctionDeclaration>;
}
pub(crate) trait GetOrCreatePredicateDeclaration
{
fn get_or_create_predicate_declaration(&self, name: &str, arity: usize)
-> std::rc::Rc<foliage::PredicateDeclaration>;
}

View File

@ -12,7 +12,7 @@ pub(crate) fn choose_value_in_term<C>(term: &clingo::ast::Term,
variable_declaration_stack: &foliage::VariableDeclarationStackLayer) variable_declaration_stack: &foliage::VariableDeclarationStackLayer)
-> Result<foliage::Formula, crate::Error> -> Result<foliage::Formula, crate::Error>
where where
C: crate::traits::GetOrCreateFunctionDeclaration C: foliage::FindOrCreateFunctionDeclaration
+ crate::traits::AssignVariableDeclarationDomain + crate::traits::AssignVariableDeclarationDomain
{ {
match term.term_type() match term.term_type()
@ -50,7 +50,7 @@ where
.map_err(|error| crate::Error::new_logic("clingo error").with(error))?; .map_err(|error| crate::Error::new_logic("clingo error").with(error))?;
let constant_declaration = let constant_declaration =
context.get_or_create_function_declaration(constant_name, 0); context.find_or_create_function_declaration(constant_name, 0);
let function = foliage::Term::function(constant_declaration, vec![]); let function = foliage::Term::function(constant_declaration, vec![]);
Ok(choose_value_in_primitive(Box::new(function), variable_declaration)) Ok(choose_value_in_primitive(Box::new(function), variable_declaration))

View File

@ -66,9 +66,9 @@ impl crate::traits::InputConstantDeclarationDomain for Context
} }
} }
impl crate::traits::GetOrCreateFunctionDeclaration for Context impl foliage::FindOrCreateFunctionDeclaration for Context
{ {
fn get_or_create_function_declaration(&self, name: &str, arity: usize) fn find_or_create_function_declaration(&self, name: &str, arity: usize)
-> std::rc::Rc<foliage::FunctionDeclaration> -> std::rc::Rc<foliage::FunctionDeclaration>
{ {
let mut function_declarations = self.function_declarations.borrow_mut(); let mut function_declarations = self.function_declarations.borrow_mut();
@ -92,9 +92,9 @@ impl crate::traits::GetOrCreateFunctionDeclaration for Context
} }
} }
impl crate::traits::GetOrCreatePredicateDeclaration for Context impl foliage::FindOrCreatePredicateDeclaration for Context
{ {
fn get_or_create_predicate_declaration(&self, name: &str, arity: usize) fn find_or_create_predicate_declaration(&self, name: &str, arity: usize)
-> std::rc::Rc<foliage::PredicateDeclaration> -> std::rc::Rc<foliage::PredicateDeclaration>
{ {
let mut predicate_declarations = self.predicate_declarations.borrow_mut(); let mut predicate_declarations = self.predicate_declarations.borrow_mut();

View File

@ -15,14 +15,14 @@ pub(crate) enum HeadType<'a>
pub(crate) fn determine_head_type<'a, C>(head_literal: &'a clingo::ast::HeadLiteral, context: &C) pub(crate) fn determine_head_type<'a, C>(head_literal: &'a clingo::ast::HeadLiteral, context: &C)
-> Result<HeadType<'a>, crate::Error> -> Result<HeadType<'a>, crate::Error>
where where
C: crate::traits::GetOrCreatePredicateDeclaration C: foliage::FindOrCreatePredicateDeclaration
{ {
let create_head_atom = |function: &'a clingo::ast::Function| -> Result<_, crate::Error> let create_head_atom = |function: &'a clingo::ast::Function| -> Result<_, crate::Error>
{ {
let function_name = function.name() let function_name = function.name()
.map_err(|error| crate::Error::new_decode_identifier(error))?; .map_err(|error| crate::Error::new_decode_identifier(error))?;
let predicate_declaration = context.get_or_create_predicate_declaration(function_name, let predicate_declaration = context.find_or_create_predicate_declaration(function_name,
function.arguments().len()); function.arguments().len());
Ok(HeadAtom Ok(HeadAtom

View File

@ -2,8 +2,8 @@ pub(crate) fn translate_body_term<C>(body_term: &clingo::ast::Term, sign: clingo
context: &C, variable_declaration_stack: &foliage::VariableDeclarationStackLayer) context: &C, variable_declaration_stack: &foliage::VariableDeclarationStackLayer)
-> Result<foliage::Formula, crate::Error> -> Result<foliage::Formula, crate::Error>
where where
C: crate::traits::GetOrCreateFunctionDeclaration C: foliage::FindOrCreateFunctionDeclaration
+ crate::traits::GetOrCreatePredicateDeclaration + foliage::FindOrCreatePredicateDeclaration
+ crate::traits::AssignVariableDeclarationDomain + crate::traits::AssignVariableDeclarationDomain
{ {
let function = match body_term.term_type() let function = match body_term.term_type()
@ -14,7 +14,7 @@ where
let function_name = function.name().map_err(|error| crate::Error::new_decode_identifier(error))?; let function_name = function.name().map_err(|error| crate::Error::new_decode_identifier(error))?;
let predicate_declaration = context.get_or_create_predicate_declaration(function_name, let predicate_declaration = context.find_or_create_predicate_declaration(function_name,
function.arguments().len()); function.arguments().len());
let parameters = function.arguments().iter().map(|_| let parameters = function.arguments().iter().map(|_|
@ -68,8 +68,8 @@ pub(crate) fn translate_body_literal<C>(body_literal: &clingo::ast::BodyLiteral,
context: &C, variable_declaration_stack: &foliage::VariableDeclarationStackLayer) context: &C, variable_declaration_stack: &foliage::VariableDeclarationStackLayer)
-> Result<foliage::Formula, crate::Error> -> Result<foliage::Formula, crate::Error>
where where
C: crate::traits::GetOrCreateFunctionDeclaration C: foliage::FindOrCreateFunctionDeclaration
+ crate::traits::GetOrCreatePredicateDeclaration + foliage::FindOrCreatePredicateDeclaration
+ crate::traits::AssignVariableDeclarationDomain + crate::traits::AssignVariableDeclarationDomain
{ {
match body_literal.sign() match body_literal.sign()
@ -145,8 +145,8 @@ pub(crate) fn translate_body<C>(body_literals: &[clingo::ast::BodyLiteral], cont
variable_declaration_stack: &foliage::VariableDeclarationStackLayer) variable_declaration_stack: &foliage::VariableDeclarationStackLayer)
-> Result<foliage::Formulas, crate::Error> -> Result<foliage::Formulas, crate::Error>
where where
C: crate::traits::GetOrCreateFunctionDeclaration C: foliage::FindOrCreateFunctionDeclaration
+ crate::traits::GetOrCreatePredicateDeclaration + foliage::FindOrCreatePredicateDeclaration
+ crate::traits::AssignVariableDeclarationDomain + crate::traits::AssignVariableDeclarationDomain
{ {
body_literals.iter() body_literals.iter()