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 в основном нулевой относительно, и я думаю, что он может сохранить память, если вы идете с потоком.

Позвольте мне знать, если это помогает....

Другие вопросы по тегам