Как назначить то темп и заменить его на наибольший?
Короткий ответ заключается в том, что вы не можете. Переменные в Erlang не могут быть изменены после назначения.
Немного более длинный ответ заключается в том, что, хотя вы не можете изменить переменную внутри определенного вызова функции, вы всегда можете самостоятельно выполнять рекурсию. Оптимизирована рекурсия хвоста в Erlang.
В примере кода, который вы указали, list_max будет когда-либо смотреть только на первые два элемента списка. В четвертом и пятом предложениях каждый должен снова вызвать list_max, с новым значением Temp в первом параметре. Это обычное дело в функциональных языках. В этом случае Temp известен как Accumulator (я часто называю переменную Acc, чтобы отразить это использование, но, конечно, вы можете назвать ее, как хотите).
Позвольте мне показать другое решение, которое можно было бы рассматривать как «промежуточный» ответ Macelo и ответ stmi в:
list_max([H|T]) -> list_max(H , T).
list_max(X , [] ) -> X;
list_max(X , [H|T]) -> list_max(erlang:max(H, X) , T).
(я угробил пункт, который определяет пустой список, потому что я не думаю, что это действительно вы покупаете много - хотя теперь он будет генерировать исключение, если вы вызываете его с пустым списком.)
@ daniel-luna пример лучший. На самом деле это реализация Erlang на основе списков: max (L). Почему это лучше? Пожалуйста, обратите внимание на порядок итераций.В вашем случае вы будете лишним соответствовать FIRST для каждой итерации конца списка. Примеры лучших итераций приведены в примере daniel-luna –