12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485(**************************************************************************)(* This file is part of the Codex semantics library. *)(* *)(* Copyright (C) 2013-2025 *)(* CEA (Commissariat à l'énergie atomique et aux énergies *)(* alternatives) *)(* *)(* you can redistribute it and/or modify it under the terms of the GNU *)(* Lesser General Public License as published by the Free Software *)(* Foundation, version 2.1. *)(* *)(* It is distributed in the hope that it will be useful, *)(* but WITHOUT ANY WARRANTY; without even the implied warranty of *)(* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *)(* GNU Lesser General Public License for more details. *)(* *)(* See the GNU Lesser General Public License version 2.1 *)(* for more details (enclosed in the file LICENSE). *)(* *)(**************************************************************************)includeArraytype'at='aarrayletempty=[||]typesformat=(unit,Format.formatter,unit)Stdlib.formattype'aformatter=Format.formatter->'a->unitletiter3fabc=letalen=Array.lengthainassert(Array.lengthb==alen);assert(Array.lengthc==alen);fori=0toalen-1dof(Array.unsafe_getai)(Array.unsafe_getbi)(Array.unsafe_getci);done;;letpp_iter?(pre=format_of_string"@[")?(sep=format_of_string"")?(suf=format_of_string"@]")iterppfmtv=letneed_sep=reffalseinFormat.fprintffmtpre;iter(funv->if!need_septhenFormat.fprintffmtsepelseneed_sep:=true;ppfmtv;)v;Format.fprintffmtsuf;;;letpp_array?pre?sep?suffunc=letiterfar=fori=0to(Array.lengthar)-1dof(unsafe_getari)doneinpp_iter?pre?sep?sufiterfuncletfold_left2finita1a2=letl1=Array.lengtha1andl2=Array.lengtha2inassert(l1==l2);letrecloopiacc=ifi==l1thenaccelseletacc=facc(unsafe_geta1i)(unsafe_geta2i)inloop(i+1)accinloop0init;;letfold_left3finita1a2a3=letl1=Array.lengtha1andl2=Array.lengtha2andl3=Array.lengtha3inassert(l1==l2);assert(l1==l3);letrecloopiacc=ifi==l1thenaccelseletacc=facc(unsafe_geta1i)(unsafe_geta2i)(unsafe_geta3i)inloop(i+1)accinloop0init;;let_cast_from_arrayx=x