From: Mark Thom Date: Mon, 4 May 2020 00:43:23 +0000 (-0600) Subject: make term{_attributed_}variables/2 order {attributed} variables by left-to-right... X-Git-Tag: v0.8.123~64 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=b8400e0c92f0fb01cfdab5bf4e6bb48248ddf9a1;p=scryer-prolog.git make term{_attributed_}variables/2 order {attributed} variables by left-to-right occurrence --- diff --git a/src/prolog/machine/attributed_variables.rs b/src/prolog/machine/attributed_variables.rs index 6595ba53..b7e9ceee 100644 --- a/src/prolog/machine/attributed_variables.rs +++ b/src/prolog/machine/attributed_variables.rs @@ -1,8 +1,6 @@ use crate::prolog::heap_iter::*; use crate::prolog::machine::*; -use indexmap::IndexSet; - use std::cmp::Ordering; use std::vec::IntoIter; @@ -142,13 +140,13 @@ impl MachineState { } pub(super) - fn attr_vars_of_term(&self, addr: Addr) -> IndexSet { - let mut seen_vars = IndexSet::new(); + fn attr_vars_of_term(&self, addr: Addr) -> Vec { + let mut seen_vars = vec![]; let mut iter = self.acyclic_pre_order_iter(addr); while let Some(addr) = iter.next() { if let HeapCellValue::Addr(Addr::AttrVar(h)) = self.heap.index_addr(&addr).as_ref() { - seen_vars.insert(addr); + seen_vars.push(addr); let mut l = h + 1; let mut list_elements = vec![]; diff --git a/src/prolog/machine/system_calls.rs b/src/prolog/machine/system_calls.rs index 74f82215..881789ea 100644 --- a/src/prolog/machine/system_calls.rs +++ b/src/prolog/machine/system_calls.rs @@ -20,8 +20,6 @@ use crate::prolog::rug::Integer; use crate::ref_thread_local::RefThreadLocal; -use indexmap::IndexSet; - use std::cmp; use std::convert::TryFrom; use std::io::{stdout, Read, Write}; @@ -3378,18 +3376,16 @@ impl MachineState { } &SystemClauseType::TermVariables => { let a1 = self[temp_v!(1)]; - let mut seen_vars = IndexSet::new(); + let mut seen_vars = vec![]; for addr in self.acyclic_pre_order_iter(a1) { if addr.is_ref() { - seen_vars.insert(addr); + seen_vars.push(addr); } } let outcome = Addr::HeapCell(self.heap.to_list(seen_vars.into_iter())); - - let a2 = self[temp_v!(2)]; - self.unify(a2, outcome); + self.unify(self[temp_v!(2)], outcome); } &SystemClauseType::TruncateLiftedHeapTo => { match self.store(self.deref(self[temp_v!(1)])) {