in pascal, you have to predefine all your variable types, including array lengths, so you should already know the length.
For most programs we need to write, this may be true.
There are however many cases where we need to find the length of an array.
An array can be defined as open.
VAR
Example:ARRAY OF STRING;
Example2:ARRAY OF ARRAY OF INTEGER;
These arrays are resizeable in runtime :-)
SetLength(Example,10);
SetLength(Example2,10,10);
A multidimensional array is nice to use this way. Each sub array can be defined separately.
SetLength(Example2,5);
SetLength(Example2[0],10);
SetLength(Example2[1],6);
SetLength(Example2[2],90);
SetLength(Example2[3],12);
SetLength(Example2[4],19);
Instead of creating an array that is holding all the possible records our program can possibly need, we can design the program to only use as much memory as is actually needed on demand.
In these cases with SetLength, it makes sense to use the command HIGH(Example2[4]) in order to read out its set length.
Since SetLength always start an array at [0], the command LOW will always return Zero.
PROCEDURE SomeParameters(CONST Params:ARRAY OF INTEGER);
VAR
x:BYTE;
BEGIN
// HIGH(Params) will return the number of integers passed in the Params array.
FOR x:=0 TO HIGH(Params) DO BEGIN
// Code for whatever you would like to do with the parameters.
END;
END;
And again... When an array is passed as parameters, to my knowledge it always start with [0], so LOW(Params) will always return Zero.
IF you however declare an array from scratch in VAR section of program.
VAR
Example : ARRAY[7..14];
BEGIN
LOW(Example)// Should return 7, but we know this already as it is already defined.
END.

Best regards.