# File htree/loc.rb, line 31
    def subst(pairs)
      pairs = pairs.map {|key, val|
        key = key.index_list(self)
        unless Array === val
          val = [val]
        end
        [key, val]
      }

      pairs_empty_key, pairs_nonempty_key =
        pairs.partition {|key, val| key.empty? }
      if !pairs_empty_key.empty?
        if !pairs_nonempty_key.empty?
          raise ArgumentError, "cannot substitute a node under substituting tree."
        end
        result = []
        pairs_empty_key.each {|key, val| result.concat val }
        result.compact!
        if result.length == 1
          return result[0]
        else
          raise ArgumentError, "cannot substitute top node by multiple nodes: #{nodes.inspect}"
        end
      end
      if pairs_nonempty_key.empty?
        return self
      end

      subst_internal(pairs)
    end