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; }