Replaced the two rules for the values of a PDDL variable with a single one.

This commit is contained in:
Patrick Lühne 2016-08-17 23:31:31 +02:00
parent 63ed1299ec
commit 363070b579

View File

@ -130,7 +130,10 @@ void TranslatorASP::translateTypes() const
void TranslatorASP::translatePredicates() const void TranslatorASP::translatePredicates() const
{ {
m_outputStream << utils::Heading2("variables"); m_outputStream
<< utils::Heading2("variables") << std::endl
<< utils::RuleName("boolean") << "(" << utils::Boolean("true") << ")." << std::endl
<< utils::RuleName("boolean") << "(" << utils::Boolean("false") << ")." << std::endl;
const auto &predicates = m_description.domain().predicates(); const auto &predicates = m_description.domain().predicates();
@ -149,27 +152,6 @@ void TranslatorASP::translatePredicates() const
m_outputStream << ")"; m_outputStream << ")";
}; };
const auto printValueRule =
[&](const auto &predicate, const auto &value)
{
m_outputStream
<< utils::RuleName("contains") << "("
<< utils::Keyword("variable") << "(";
printPredicateName(predicate);
m_outputStream
<< "), " << utils::Keyword("value") << "(";
printPredicateName(predicate);
m_outputStream << ", " << utils::Boolean(value) << "))";
this->translateVariablesBody(predicate->arguments());
m_outputStream << "." << std::endl;
};
std::for_each(predicates.cbegin(), predicates.cend(), std::for_each(predicates.cbegin(), predicates.cend(),
[&](const auto &predicate) [&](const auto &predicate)
{ {
@ -186,8 +168,27 @@ void TranslatorASP::translatePredicates() const
m_outputStream << "." << std::endl; m_outputStream << "." << std::endl;
printValueRule(predicate, "true"); m_outputStream
printValueRule(predicate, "false"); << utils::RuleName("contains") << "("
<< utils::Keyword("variable") << "(";
printPredicateName(predicate);
m_outputStream << "), " << utils::Keyword("value") << "(";
printPredicateName(predicate);
m_outputStream << ", " << utils::Variable("B") << "))";
this->translateVariablesBody(predicate->arguments());
// TODO: clean up
if (predicate->arguments().empty())
m_outputStream << " :- ";
else
m_outputStream << ", ";
m_outputStream << utils::RuleName("boolean") << "(" << utils::Variable("B") << ")." << std::endl;
}); });
} }