equal
deleted
inserted
replaced
541 | itr (a::l) = f(a, itr l) |
541 | itr (a::l) = f(a, itr l) |
542 in itr l end; |
542 in itr l end; |
543 |
543 |
544 (* (op @) [x1, ..., xn] ===> x1 @ (x2 ... @ (x[n-1] @ xn)) |
544 (* (op @) [x1, ..., xn] ===> x1 @ (x2 ... @ (x[n-1] @ xn)) |
545 for n > 0, operators that associate to the right (not tail recursive)*) |
545 for n > 0, operators that associate to the right (not tail recursive)*) |
546 fun foldr1 f l = |
546 fun foldr1 f [] = raise Empty |
547 let fun itr [x] = x |
547 | foldr1 f l = |
548 | itr (x::l) = f(x, itr l) |
548 let fun itr [x] = x |
549 in itr l end; |
549 | itr (x::l) = f(x, itr l) |
|
550 in itr l end; |
550 |
551 |
551 fun fold_index f = |
552 fun fold_index f = |
552 let |
553 let |
553 fun fold_aux _ [] y = y |
554 fun fold_aux _ [] y = y |
554 | fold_aux i (x :: xs) y = fold_aux (i+1) xs (f (i, x) y); |
555 | fold_aux i (x :: xs) y = fold_aux (i+1) xs (f (i, x) y); |