]> Repositorios git - scryer-prolog.git/commitdiff
make term{_attributed_}variables/2 order {attributed} variables by left-to-right...
authorMark Thom <[email protected]>
Mon, 4 May 2020 00:43:23 +0000 (18:43 -0600)
committerMark Thom <[email protected]>
Mon, 4 May 2020 00:43:23 +0000 (18:43 -0600)
src/prolog/machine/attributed_variables.rs
src/prolog/machine/system_calls.rs

index 6595ba538ed56222152976f476af7aa6ee65dc86..b7e9ceee345ad82ed95be5440d81c8afff348b7a 100644 (file)
@@ -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<Addr> {
-        let mut seen_vars = IndexSet::new();
+    fn attr_vars_of_term(&self, addr: Addr) -> Vec<Addr> {
+        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![];
index 74f82215f663e4a276e3bce8496c9341669e86a2..881789eac78ee801340371941cb22c34f4c7f7ea 100644 (file)
@@ -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)])) {