何かを temp に割り当てて、それを最高のものに置き換えるにはどうすればよいですか?
短い答えは、あなたができないということです。Erlang の変数は、一度割り当てられると変更できません。
少し長い答えは、特定の関数呼び出し内で変数を変更することはできませんが、常に自己再帰を行うことができるということです。Erlang の末尾再帰が最適化されました。
あなたが提供したコード例では、list_max はリストの最初の 2 つの要素のみを調べます。4 番目と 5 番目の節では、最初のパラメーターに Temp の新しい値を指定して、それぞれ list_max を再度呼び出す必要があります。これは、関数型言語で行う一般的なことです。この場合、Temp はアキュムレータとして知られています (変数 Acc には、この用途を反映して名前を付けることがよくありますが、もちろん、好きな名前を付けることができます)。
マセロの答えと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 ).
(空のリストを検出する句も捨てました。実際にはあまりメリットがないと思うためです。ただし、空のリストで呼び出すと例外がスローされるようになりました。)