Comment puis-je attribuer quelque chose à température et de le remplacer à la le plus élevé?
La réponse courte est que vous ne pouvez pas. Les variables dans Erlang ne peuvent pas être changées une fois assignées.
La réponse un peu plus longue est que, même si vous ne pouvez pas modifier une variable dans un appel de fonction particulier, vous pouvez toujours effectuer une auto-recurse. La récursion-queue à Erlang est optimisée.
Dans l'exemple de code que vous avez fourni, list_max ne regarde que les deux premiers éléments de la liste. Les quatrième et cinquième clauses doivent à nouveau appeler list_max, avec la nouvelle valeur de Temp dans le premier paramètre. C'est une chose commune à faire dans les langages fonctionnels. Dans ce cas, Temp est connu comme un Accumulateur (je nomme souvent la variable Acc pour refléter cette utilisation, mais bien sûr vous pouvez l'appeler comme vous voulez).
Permettez-moi de montrer une autre solution qui pourrait être considérée comme « entre » la réponse de Macelo et la réponse de 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).
(j'ai aussi abandonné la clause qui détecte la liste vide, parce que je ne pense pas vraiment vous achète beaucoup - bien qu'il va maintenant lancer une exception si vous l'appelez avec une liste vide.)
@ daniel-luna exemple est le meilleur. C'est en fait l'implémentation native de Erlang des listes: fonction max (L). Pourquoi c'est mieux? Veuillez noter l'ordre d'itération.Dans votre cas, vous devrez entrer FIRST pour chaque itération à la fin de la liste. Les meilleurs cas d'itération sont dans l'exemple de daniel-luna –