Там result - зарезервированное имя для того, что возвращает функция.
Да, я наверное не совсем удачно выразился, имел в виду, что эта (автоматически создаваемая) внутри скоупа функции переменная
result, вне этого скоупа не определена. Исходный вариант кода выглядит (в моем понимании), как будто возвращаемое функцией значение игнорируется, а каждый из вложенных вызовов функции просто изменяет значение какой-либо глобальной переменной, типа вот такого:
var rr: boolean = false; //global variable declaration
function check_negative_el(a: mass; start, stop: integer): boolean;
begin
if (a[start] < 0) or (start > stop) then
rr:= true //modifying the global variable
else
begin
check_negative_el(a, start+1, stop); //not really interested in function call result
end;
end;
Кстати, вот эта конструкция
if (a[start] < 0) or (start > stop) then
result := true
выглядит так, что на массиве из сплошь неотрицательных элементов мы таки получим
true, разве нет? За счет самого последнего вложенного вызова
check_negative_el(a, stop+1, stop);. Или же оно вообще при этом вызове выдаст ошибку, если
a[stop+1] не определено; подозрительное место, в общем