(!****************************************************** Mosel User Guide Example Problems ================================= file usingwith.mos `````````````````` Definition of 'with' statements for local declaration of structured types. (c) 2022 Fair Isaac Corporation author: S. Heipcke, Feb. 2022 *******************************************************!) model "using with statements" !**** 'with' can take a comma-separated list of several local declarations L:=[1,4,2,10,1] with first=L.first, last=L.last do writeln("L starts with value 1: ", first=1) writeln("L starts and ends with same value: ", first=last) end-do !**** Local declaration as shorthand to save access time for elements of !**** complex structures when using them repeatedly within a block of code declarations NB: dynamic array(R:range) of set of integer end-declarations NB(1):={2,3,4}; NB(2):={1,3,5,6}; NB(6):={2,4} forall(i in R | exists(NB(i)) ) with S=NB(i), el=getelt(S) do writeln(i, ": Size of set=", S.size, ", contains 1:", 1 in S, ", an element the set:", el, " is different from 0:", el<>0) end-do ! Local declaration of scalars is also possible in 'forall' statements, but ! this form cannot be used for structured types forall(i in R | exists(NB(i)), el=getelt(NB(i))) with S=NB(i) do writeln(i, ": Size of set=", S.size, ", contains 1:", 1 in S, ", an element the set:", el) end-do !**** Aliasing of an array and its index set(s): efficient use of 'exists' !**** for enumerating an array with unnamed indexing sets declarations A1:dynamic array(range,string) of integer ! Array with unnamed indexing sets end-declarations A1(1,'a'):=1; A1(4,'c'):=4; A1(6,'d'):=6 with A(I,J)=A1 do forall(i in I, j in J | exists(A(i,j))) write(" ", A(i,j)) end-do writeln end-model