Algol60 передает целочисленный элемент массива в качестве параметра - ошибка неправильного типа
У меня есть следующая проблема.
Когда я пытаюсь запустить код с помощью arun file.obj (я скомпилировал файл algol.exe)
BEGIN
INTEGER PROCEDURE fun(tab,index,lower,upper);
INTEGER tab,index,lower,upper;
BEGIN
INTEGER t;
text (1, "Start");
t := 0;
FOR index := lower STEP 1 UNTIL upper DO
t := t + tab;
fun := t;
END;
INTEGER ARRAY t[1:10];
INTEGER i,result,lower,upper;
lower := 1;
upper := 10;
FOR i := 1 STEP 1 UNTIL 10 DO
t[i] := i;
i := 1;
result := fun(t[i],i,lower,upper);
END FINISH;
Я все еще получаю ошибку:
ERROR 3
ADD PBASE PROC LOC
07D4 0886 1 13
083A 0842 0 115
Компилятор, который я использую, является продуктом RHA (Minisystems) "The Rogalgol Algol60".
Ошибка 3 означает "3 Процедура вызывается, когда фактический и формальный типы параметров не совпадают".
Но я не понимаю почему. Причиной ошибки является t[i] (если я перехожу на i - это нормально).
Кто-то знает, что я делаю неправильно?
Я компилирую код на досбокс (linux)
1 ответ
Проблема в том, что индекс целочисленного массива, который вы передаете своей процедуре, не совпадает с целым числом, которое он ожидает. Я не могу вспомнить, что целочисленный массив полон, но я предполагаю, что это не целые числа... Должен признать, что я никогда не использую их, но не могу вспомнить почему. Возможно, из-за таких ограничений. Я придерживаюсь массивов Real и EBCDIC.
Вы почти наверняка можете это исправить, определив новое целое число, j; вставив "j:= t[i];" до вашего вызова "веселье"; затем вызывая 'fun' с 'j', а не с t[i].
Кстати, вы можете сделать массив (и цикл for) нулевым относительным. ALGOL в основном нулевой относительно, и я думаю, что он может сохранить память, если вы идете с потоком.
Позвольте мне знать, если это помогает....