Необходимо написать программу на Erlang, которая будет рекурсивно умножать элементы матрицы 100 на 100

Ваша основная проблема в том, что вы думаете, будто программирование на Erlang сильно отличается от программирования на другом языке программирования. На таких задачах разница будет практически не заметна.

Раз вы уже умеете программировать, то не буду разбирать алгоритм, а остановлюсь только на реализации.

В качестве примера возьму C#, т.к. Pascal и Delphi не знаю, но думаю там циклы точно такие-же.

C#Выделить код

1
2
3
4
5
6
7
8
9

    for(int i = 0; i < n; i++)
            for (int j = 0; j < m; j++)
            {
                double sum = 0.0;
                for (int k = 0; k < l; k++)
                    sum += a[i, k]b[k, j];
                result[i, j] = sum;
            }
        return result;

Для начала отсечем неподходящие матрицы:

PrologВыделить код

1
2

mult(A,B) when length(hd(A))=:= length(B)->
    mult(A,B,length(A),length(hd(B)),length(hd(A))).

Дальше задача состоит из 2 внешних циклов и суммирования внутреннего.

Теперь смотрим на выходной тип данных. Раз нужно получить матрицу - значит делаем матрицу:

PrologВыделить код

| | |
| --- | --- |
| 1 | [[Sum(I,J)||J<-Range(1,M)] || I<-Range(1,N)] |

здесь цикл представлен генератором списков. Range функция генератор, в данном случае псевдоним для библиотечной:

Теперь определяем функцию суммирования:

PrologВыделить код

1
2

Sum = fun(I,J)->
        lists:sum([Nth(K,Nth(I,A))Nth(J,Nth(K,B)) || K<-Range(1,L)]) end

для собственно суммирования снова обращаемся к стандартному модулю lists, цикл - генератор списка.

Вместо индексирования вызываем функцию Nth, в данном случае это снова псевдоним:

Как видите четко прослеживается соответствие. Отличие только в порядке написания индексов.Но если вам очень захочется можно написать функцию или даже целый модуль обертку, чтобы вызывать функции в удобном для вас виде, например

PrologВыделить код

1
2
3

get_elem(I,J,Matrix) ->
Nth = fun lists:nth/2,
 Nth(J,Nth(I,Matrix)).

Хотя, конечно, писать на одном языке как на другом - плохая практика. Но научится выбирать более правильный подход можно только с опытом.

Никогда бы не стал "ругаться" на человека, который показывает свои попытки решения.