def subst( hash )
      if hash[ self ]
        hash[ self ]
      elsif not @meta.variables.empty? and hash[ @meta.variables.to_a.first ]
        Variable.new @meta.subst( hash )
      else
        self
      end
    end
def subst( hash )
      if hash[ self ]
        hash[ self ]
      elsif not @meta.variables.empty? and hash[ @meta.variables.to_a.first ]
        Variable.new @meta.subst( hash )
      else
        self
      end
    end
Substitute variables

 Substitute the variables with the values given in the hash.

 @param [Hash] hash Substitutions to apply.

 @return [Node] Term with substitutions applied.

 @private