我一直在摆弄这段代码几个小时,我仍然不知道我做错了什么,我有其他的功能,这是唯一一个我一直有麻烦。
-module(if_statements).
-export([weather/1]).
weather(TEMP) ->
if
TEMP <= 0 ->
io:fwrite("freezing\\n");
0 < TEMP <= 10 ->
io:fwrite("cold\\n");
10 < TEMP <= 20 ->
io:fwrite("normal\\n");
20 < TEMP <= 30 ->
io:fwrite("hot\\n");
30 < TEMP <= 40 ->
io:fwrite("heated\\n");
40 < TEMP ->
io:fwrite("hirviendo\\n").
true ->
io:fwrite("unknown")
end.
Shell:Shell也没有什么帮助
if_statements.erl:6:8: syntax error before: '<='
% 6| TEMP <= 0 ->
% | ^
if_statements.erl:18:8: syntax error before: '->'
% 18| true ->
% | ^
if_statements.erl:2:2: function clima/1 undefined
% 2| -export([weather/1]).
% |
3条答案
按热度按时间q5lcpyga1#
@alias的答案是正确的,尽管我很确定最后的
true
子句永远不会匹配,因为不管TEMP
的值是什么,它总是落入前面的一个子句中。OTOH,你可能需要考虑完全避免if
语句,而只使用带保护的多子句函数...oknrviil2#
您的语法有点不对。请尝试以下操作:
eit6fx6z3#
函数子句(或if条件)可以简单地如下所示:
与if表达式类似,erlang检查第一个函数子句,如果匹配,则执行该函数子句,之后不再检查后续函数子句。如果子句不匹配,则检查下一个函数子句,依此类推。
输出:
另外,在Erlang中非常不同的是(尽管这里不相关),函数子句的参数可以是常量:
在大多数语言中,函数定义中的所有参数都必须是变量。
在Erlang中,function clause matching 是剖析参数和控制执行流的一种非常强大的方法。