0

私はしばらくErlangをやっていないので練習していますが、もう理解できません:(

-module(conversion).
-export([convert/1, convertMeteoCelcius/1]).

convert({celcius, Degres}) -> {farenheit, (Degres * 1.8) + 32};
convert({celcius, Degres}) -> {celcius, Degres};
convert({farenheit, Degres}) -> {celcius, (Degres - 32)/1.8};
convert({farenheit, Degres}) -> {farenheit, Degres}.

convertMeteoCelcius([], [Result])
    -> [Result];

convertMeteoCelcius([{City, {Unit, Temp}}|Rest], [Result]) 
    -> convertMeteoCelcius([Rest], [{City, convert({celcius, Temp})}, Result]).

convertMeteoCelcius([Raw]) -> formatMeteoCelcius([Raw], []).
4

1 に答える 1

0

コンパイラ エラーが 1 つありますformatMeteoCelcius/2。最後の行に未定義です。という意味だったと思いますconvertMeteoCelcius。それを変更すると、コードがコンパイルされます。

一方、3 つの警告メッセージが表示されます。3 つ目は未使用のUnit変数に関するもので、無視しても問題ないと思います。ただし、他の 2 つは、コードに 2 つの潜在的な問題があることを示しています。

conversion.erl:5: Warning: this clause cannot match
                  because a previous clause at line 4 always matches
conversion.erl:7: Warning: this clause cannot match
                  because a previous clause at line 6 always matches

最初の警告は基本的に、結果をどうしたいかを決める必要があることを示していconvert({celcius, 0})ます。{farenheit, 32}と の両方にすることはできません{celcius, 0}

Erlang と Prolog の明らかな類似性に惑わされたかもしれません。Erlang は論理プログラミング言語ではありません。それは機能的です。パターン マッチングを使用して定義された関数ごとに、呼び出すたびに 1 つのパターンが決定論的に使用されます。

于 2013-10-21T23:24:41.863 に答える