src/Pure/General/array.ML
author wenzelm
Mon, 04 Nov 2024 20:55:01 +0100
changeset 81340 30f7eb65d679
parent 77896 a9626bcb0c3b
permissions -rw-r--r--
clarified signature; clarified modules;

(*  Title:      Pure/General/array.ML
    Author:     Makarius

Additional operations for structure Array, following Isabelle/ML conventions.
*)

signature ARRAY =
sig
  include ARRAY
  val nth: 'a array -> int -> 'a
  val upd: 'a array -> int -> 'a -> unit
  val forall: ('a -> bool) -> 'a array -> bool
  val member: ('a * 'a -> bool) -> 'a array -> 'a -> bool
  val fold: ('a -> 'b -> 'b) -> 'a array -> 'b -> 'b
  val fold_rev: ('a -> 'b -> 'b) -> 'a array -> 'b -> 'b
end;

structure Array: ARRAY =
struct

open Array;

fun nth arr i = sub (arr, i);
fun upd arr i x = update (arr, i, x);

val forall = all;

fun member eq arr x = exists (fn y => eq (x, y)) arr;

fun fold f arr x = foldl (fn (a, b) => f a b) x arr;
fun fold_rev f arr x = foldr (fn (a, b) => f a b) x arr;

end;