remove Term impl

This commit is contained in:
Mark Thom
2016-10-30 20:32:13 -06:00
parent 509b7838c7
commit 1272d97311
2 changed files with 16 additions and 30 deletions

View File

@@ -17,24 +17,6 @@ pub enum Term {
Var(Var)
}
impl Term {
pub fn name(&self) -> &Atom {
match self {
&Term::Atom(ref atom) => atom,
&Term::Var(ref var) => var,
&Term::Clause(ref atom, _) => atom
}
}
pub fn is_variable(&self) -> bool {
if let &Term::Var(_) = self {
return true;
}
return false;
}
}
#[derive(Clone)]
pub enum MachineInstruction {
GetStructure(Atom, usize, usize),

View File

@@ -60,10 +60,12 @@ pub fn compile_query<'a>(t: &'a Term) -> Program
let mut counter : usize = max_reg_used; // r + 1;
for t in terms {
if t.is_variable() && !variable_allocs.contains_key(t.name()) {
counter += 1;
variable_allocs.insert(t.name(), (counter, false));
} else if !t.is_variable() {
if let &Term::Var(ref var) = t.as_ref() {
if !variable_allocs.contains_key(var) {
counter += 1;
variable_allocs.insert(var, (counter, false));
}
} else {
counter += 1;
}
}
@@ -71,7 +73,7 @@ pub fn compile_query<'a>(t: &'a Term) -> Program
max_reg_used = counter;
for t in terms.iter().rev() {
if t.is_variable() {
if let &Term::Var(_) = t.as_ref() {
counter -= 1;
continue;
}
@@ -142,13 +144,15 @@ pub fn compile_fact<'a>(t: &'a Term) -> Program {
let mut counter : usize = reg;
for t in terms {
if t.is_variable() && !variable_allocs.contains_key(t.name()) {
variable_allocs.insert(t.name(), counter);
fact.push(MachineInstruction::UnifyVariable(counter));
counter += 1;
} else if t.is_variable() {
let r = variable_allocs.get(t.name()).unwrap();
fact.push(MachineInstruction::UnifyValue(*r));
if let &Term::Var(ref var) = t.as_ref() {
if !variable_allocs.contains_key(var) {
variable_allocs.insert(var, counter);
fact.push(MachineInstruction::UnifyVariable(counter));
counter += 1;
} else {
let r = variable_allocs.get(var).unwrap();
fact.push(MachineInstruction::UnifyValue(*r));
}
} else {
fact.push(MachineInstruction::UnifyVariable(counter));
queue.push_back((counter, t));