#ifndef __PLASP__PDDL__TRANSLATION__PREDICATE_H #define __PLASP__PDDL__TRANSLATION__PREDICATE_H #include #include #include #include #include namespace plasp { namespace pddl { namespace translation { //////////////////////////////////////////////////////////////////////////////////////////////////// // // Predicate // //////////////////////////////////////////////////////////////////////////////////////////////////// void printPredicateName(output::ColorStream &outputStream, const expressions::PredicateDeclaration &predicateDeclaration); void printDerivedPredicateName(output::ColorStream &outputStream, const expressions::DerivedPredicate &derivedPredicate); //////////////////////////////////////////////////////////////////////////////////////////////////// inline void printPredicateName(output::ColorStream &outputStream, const expressions::PredicateDeclaration &predicateDeclaration) { outputStream << output::Keyword("variable") << "("; if (predicateDeclaration.parameters().empty()) { outputStream << output::String(predicateDeclaration.name().c_str()) << ")"; return; } outputStream << "(" << output::String(predicateDeclaration.name().c_str()); translation::translateVariablesForRuleHead(outputStream, predicateDeclaration.parameters()); outputStream << "))"; } //////////////////////////////////////////////////////////////////////////////////////////////////// inline void printDerivedPredicateName(output::ColorStream &outputStream, const expressions::DerivedPredicate &derivedPredicate) { outputStream << output::Keyword("derivedVariable") << "("; const auto id = derivedPredicate.id(); if (derivedPredicate.parameters().empty()) { outputStream << output::Number(id) << ")"; return; } outputStream << "(" << output::Number(id); translation::translateVariablesForRuleHead(outputStream, derivedPredicate.parameters()); outputStream << "))"; } //////////////////////////////////////////////////////////////////////////////////////////////////// } } } #endif