use crate::term::syntax::{
LanguageTerm, LanguageTermNode, RewritableLanguageOperatorSymbol, TermFactory,
};
pub trait FromDomainSpecificTermToRewritableTerm<LOS: RewritableLanguageOperatorSymbol>:
Sized + Clone
{
fn get_operator_at_root(&self) -> LOS;
fn get_subterms(&self) -> Vec<&Self>;
fn to_rewritable_term(&self, factory: &mut TermFactory<LOS>) -> LanguageTerm<LOS> {
let mut sub_terms = vec![];
for domain_specific_sub_term in self.get_subterms() {
sub_terms.push(domain_specific_sub_term.to_rewritable_term(factory));
}
LanguageTermNode::build(self.get_operator_at_root(), sub_terms, factory)
}
}