pub fn variables(&self) -> Vec<Symbol> {
        struct VariableVisitor {
            seen: HashSet<Symbol>,
            vars: Vec<Symbol>,
        }

        impl Visitor for VariableVisitor {
            fn visit_variable(&mut self, v: &Symbol) {
                if self.seen.insert(v.clone()) {
                    self.vars.push(v.clone());
                }
            }
        }

        let mut visitor = VariableVisitor {
            seen: HashSet::new(),
            vars: vec![],
        };

        walk_operation(&mut visitor, &self);
        visitor.vars
    }
/// Construct & return a set of symbols that occur in this operation.
Construct & return a set of symbols that occur in this operation.
Construct & return a set of symbols that occur in this operation .
pub fn variables(&self) -> Vec<Symbol> {
        struct VariableVisitor {
            seen: HashSet<Symbol>,
            vars: Vec<Symbol>,
        }
        impl Visitor for VariableVisitor {
            fn visit_variable(&mut self, v: &Symbol) {
                if self.seen.insert(v.clone()) {
                    self.vars.push(v.clone());
                }
            }
        }
        let mut visitor = VariableVisitor {
            seen: HashSet::new(),
            vars: vec![],
        };
        walk_operation(&mut visitor, &self);
        visitor.vars
    }
pub fn variables ( & self ) -> Vec < Symbol > { struct VariableVisitor { seen : HashSet < Symbol > , vars : Vec < Symbol > , } impl Visitor for VariableVisitor { fn visit_variable ( & mut self , v : & Symbol ) { if self . seen . insert ( v . clone ( ) ) { self . vars . push ( v . clone ( ) ) ; } } } let mut visitor = VariableVisitor { seen : HashSet :: new ( ) , vars : vec ! [ ] , } ; walk_operation ( & mut visitor , & self ) ; visitor . vars }
Construct & return a set of symbols that occur in this operation.
Construct & return a set of symbols that occur in this operation .
&self