From b21b4f47bf11f5b41deaf2e9e8e4643f6e1ec252 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20L=C3=BChne?= Date: Fri, 3 Nov 2017 01:49:24 +0100 Subject: [PATCH] Made form of variables within values consistent. Previously, variables referenced within values were unpacked within values. This was inconsistent, because all predicates are usually used in their unpacked form in the rest of the output format. This commit makes this consistent by using variables in their packed form within values, making it more compact to handle them. --- include/plasp/pddl/translation/DerivedPredicate.h | 12 ++++++++++-- include/plasp/pddl/translation/Predicate.h | 11 +++++++++-- src/plasp/pddl/TranslatorASP.cpp | 14 +++++++------- 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/include/plasp/pddl/translation/DerivedPredicate.h b/include/plasp/pddl/translation/DerivedPredicate.h index e8a1cea..99532dd 100644 --- a/include/plasp/pddl/translation/DerivedPredicate.h +++ b/include/plasp/pddl/translation/DerivedPredicate.h @@ -25,6 +25,7 @@ void translateDerivedPredicateDeclaration(colorlog::ColorStream &outputStream, c //////////////////////////////////////////////////////////////////////////////////////////////////// +// TODO: avoid code duplication with translatePredicate inline void translateDerivedPredicate(colorlog::ColorStream &outputStream, const ::pddl::normalizedAST::DerivedPredicate &derivedPredicate) { const auto &arguments = derivedPredicate.arguments; @@ -81,10 +82,17 @@ inline void translateDerivedPredicateDeclaration(colorlog::ColorStream &outputSt inline void translateDerivedPredicateToVariable(colorlog::ColorStream &outputStream, const ::pddl::normalizedAST::DerivedPredicate &derivedPredicate, bool isPositive = true) { outputStream << colorlog::Keyword("derivedVariable") << "("; + translateDerivedPredicate(outputStream, derivedPredicate); - outputStream << "), " << colorlog::Keyword("value") << "("; + + outputStream + << "), " + << colorlog::Keyword("value") << "(" + << colorlog::Keyword("derivedVariable") << "("; + translateDerivedPredicate(outputStream, derivedPredicate); - outputStream << ", "; + + outputStream << "), "; if (isPositive) outputStream << colorlog::Boolean("true"); diff --git a/include/plasp/pddl/translation/Predicate.h b/include/plasp/pddl/translation/Predicate.h index d52bcaf..7911c54 100644 --- a/include/plasp/pddl/translation/Predicate.h +++ b/include/plasp/pddl/translation/Predicate.h @@ -81,10 +81,17 @@ inline void translatePredicateDeclaration(colorlog::ColorStream &outputStream, c void translatePredicateToVariable(colorlog::ColorStream &outputStream, const ::pddl::normalizedAST::Predicate &predicate, bool isPositive = true) { outputStream << colorlog::Keyword("variable") << "("; + translatePredicate(outputStream, predicate); - outputStream << "), " << colorlog::Keyword("value") << "("; + + outputStream + << "), " + << colorlog::Keyword("value") << "(" + << colorlog::Keyword("variable") << "("; + translatePredicate(outputStream, predicate); - outputStream << ", "; + + outputStream << "), "; if (isPositive) outputStream << colorlog::Boolean("true"); diff --git a/src/plasp/pddl/TranslatorASP.cpp b/src/plasp/pddl/TranslatorASP.cpp index be72d38..aa2a21d 100644 --- a/src/plasp/pddl/TranslatorASP.cpp +++ b/src/plasp/pddl/TranslatorASP.cpp @@ -186,9 +186,9 @@ void TranslatorASP::translatePredicates() const m_outputStream << std::endl << std::endl << colorlog::Function("contains") << "(" - << colorlog::Keyword("variable") << "(" << colorlog::Variable("X") << "), " + << colorlog::Variable("X") << ", " << colorlog::Keyword("value") << "(" << colorlog::Variable("X") << ", " << colorlog::Variable("B") << ")) :- " - << colorlog::Function("variable") << "(" << colorlog::Keyword("variable") << "(" << colorlog::Variable("X") << ")), " + << colorlog::Function("variable") << "(" << colorlog::Variable("X") << "), " << colorlog::Function("boolean") << "(" << colorlog::Variable("B") << ")." << std::endl; } @@ -218,9 +218,9 @@ void TranslatorASP::translateDerivedPredicates(const ::pddl::normalizedAST::Deri m_outputStream << std::endl << std::endl << colorlog::Function("contains") << "(" - << colorlog::Keyword("derivedVariable") << "(" << colorlog::Variable("X") << "), " + << colorlog::Variable("X") << ", " << colorlog::Keyword("value") << "(" << colorlog::Variable("X") << ", " << colorlog::Variable("B") << ")) :- " - << colorlog::Function("derivedVariable") << "(" << colorlog::Keyword("derivedVariable") << "(" << colorlog::Variable("X") << ")), " + << colorlog::Function("derivedVariable") << "(" << colorlog::Variable("X") << "), " << colorlog::Function("boolean") << "(" << colorlog::Variable("B") << ")." << std::endl; @@ -443,12 +443,12 @@ void TranslatorASP::translateInitialState() const m_outputStream << std::endl << std::endl << colorlog::Function("initialState") << "(" - << colorlog::Keyword("variable") << "(" << colorlog::Variable("X") << "), " + << colorlog::Variable("X") << ", " << colorlog::Keyword("value") << "(" << colorlog::Variable("X") << ", " << colorlog::Boolean("false") << ")) :- " - << colorlog::Function("variable") << "(" << colorlog::Keyword("variable") << "(" << colorlog::Variable("X") << ")), " + << colorlog::Function("variable") << "(" << colorlog::Variable("X") << "), " << colorlog::Keyword("not") << " " << colorlog::Function("initialState") << "(" - << colorlog::Keyword("variable") << "(" << colorlog::Variable("X") << "), " + << colorlog::Variable("X") << ", " << colorlog::Keyword("value") << "(" << colorlog::Variable("X") << ", " << colorlog::Boolean("true") << "))." << std::endl; }