def walk_sequence(fexp, ftree, tree)

      i = fexp.child_ids.first

      ehead = ftree[2].take(i)
      ecurrent = ftree[2][i]
      etail = ftree[2].drop(i + 1)
      head = tree[2].take(i)
      current = tree[2][i]
      tail = tree[2].drop(i + 1)

      if ehead != head
        #
        # if the name and/or attributes of the exp are supposed to change
        # then we have to reapply it
        #
        register(MutationPoint.new(fexp.fei, tree, :re_apply))
        return
      end

      if ecurrent != current
        #
        # if the child currently applied is supposed to change, let's walk
        # it down
        #
        walk(@ps.fexp(fexp.children.first), current)
      end

      #if etail != tail
      #  #
      #  # if elements are added at the end of the sequence, let's register
      #  # a mutation that simply changes the tree (no need to re-apply)
      #  #
      #  register(MutationPoint.new(fexp.fei, tree, :update))
      #end
    end
def walk_sequence(fexp, ftree, tree)

      i = fexp.child_ids.first

      ehead = ftree[2].take(i)
      ecurrent = ftree[2][i]
      etail = ftree[2].drop(i + 1)
      head = tree[2].take(i)
      current = tree[2][i]
      tail = tree[2].drop(i + 1)

      if ehead != head
        #
        # if the name and/or attributes of the exp are supposed to change
        # then we have to reapply it
        #
        register(MutationPoint.new(fexp.fei, tree, :re_apply))
        return
      end

      if ecurrent != current
        #
        # if the child currently applied is supposed to change, let's walk
        # it down
        #
        walk(@ps.fexp(fexp.children.first), current)
      end

      #if etail != tail
      #  #
      #  # if elements are added at the end of the sequence, let's register
      #  # a mutation that simply changes the tree (no need to re-apply)
      #  #
      #  register(MutationPoint.new(fexp.fei, tree, :update))
      #end
    end
Look for mutation points in any non-concurrent expression.