И еще одно уточнение: операции & и OR вычисляются по сокращенной схеме. Это значит, что если по левому операнду можно установить значение выражения, то правый операнд вообще не вычисляется. Например,
Код: "OBERON"
IF (k>=0) & (M[k]>0) THEN...
При отрицательном k условие (k>=0) ложно, поэтому всё условие (k>=0) & (M[k]>0) считается ложным, и программа даже не пытается извлечь элемент M[k]. Если бы конъюнкция вычислялась по полной схеме (сначала оба аргумента, а потом от них "логическое И"), то возникла бы ошибка "индекс за пределами массива", потому что в M нет элементов по отрицательному индексу.
Аналогично для дизъюнкции (OR) - если левый операнд даёт TRUE, то результат операции - TRUE, на второй параметр даже и не смотрим.