Folds and apply two element at a time

fun min_int(x: Int, y: Int): Int
do
      if x < y then return x
      return y
end

var xs = [100,423,51,1,-19,55,999,-18]
assert xs.iterator.fold1(&min_int) == -19

REQUIRE : length > 1

Property definitions

functional :: iter_extras $ Iterator :: fold1
        # Folds and apply two element at a time
        #
        # ~~~~nitish
        # fun min_int(x: Int, y: Int): Int
        # do
        #       if x < y then return x
        #       return y
        # end
        #
        # var xs = [100,423,51,1,-19,55,999,-18]
        # assert xs.iterator.fold1(&min_int) == -19
        # ~~~~
        # REQUIRE : length > 1
        fun fold1(f: Fun2[E,E,E]): E
        do
                var a1 = item
                next
                var a2 = item
                next
                var res = f.call(a1,a2)
                for x in self do
                        res = f.call(res, x)
                end
                return res
        end
lib/functional/iter_extras.nit:146,9--170,11