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

有一个编译器错误:formatMeteoCelcius/2最后一行未定义。我想你的意思是convertMeteoCelcius。改变它,你的代码编译。

另一方面,您会收到三个警告消息。第三个是关于未使用的Unit变量,我想你可以放心地忽略它。但是,另外两个在您的代码中显示了两个潜在问题:

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 不是一种逻辑编程语言;它是功能性的。对于使用模式匹配定义的每个函数,每次调用它时都会确定性地使用一个模式。

于 2013-10-21T23:24:41.863 回答