Erlang在线运行

版本:

所属目录
点击了解高性能代码运行API
运行结果
教程手册
代码仓库
极速运行
终端运行
图形+终端

                        
以下是用户最新保存的代码
[更多]
显示目录

完整示例



学习嵌入式的绝佳套件,esp8266开源小电视成品,比自己去买开发板+屏幕还要便宜,省去了焊接不当搞坏的风险。 蜂鸣版+触控升级仅36元,更强的硬件、价格全网最低。

点击购买 固件广场

Erlang完整示例

接下来,我们会用一个更加完整的例子来巩固前面学到的内容。假设你有一个世界上各个城市的温度值的列表。其中,一部分是以摄氏度表示,另一部分是华氏温度表示的。首先,我们将所有的温度都转换为用摄氏度表示,再将温度数据输出。

%% This module is in file tut5.erl

-module(tut5).
-export([format_temps/1]).

%% Only this function is exported
format_temps([])->                        % No output for an empty list
    ok;
format_temps([City | Rest]) ->
    print_temp(convert_to_celsius(City)),
    format_temps(Rest).

convert_to_celsius({Name, {c, Temp}}) ->  % No conversion needed
    {Name, {c, Temp}};
convert_to_celsius({Name, {f, Temp}}) ->  % Do the conversion
    {Name, {c, (Temp - 32) * 5 / 9}}.

print_temp({Name, {c, Temp}}) ->
    io:format("~-15w ~w c~n", [Name, Temp]).
35> c(tut5).
{ok,tut5}
36> tut5:format_temps([{moscow, {c, -10}}, {cape_town, {f, 70}},
{stockholm, {c, -4}}, {paris, {f, 28}}, {london, {f, 36}}]).
moscow          -10 c
cape_town       21.11111111111111 c
stockholm       -4 c
paris           -2.2222222222222223 c
london          2.2222222222222223 c
ok

在分析这段程序前,请先注意我们在代码中加入了一部分的注释。从 % 开始,一直到一行的结束都是注释的内容。另外,-export([format_temps/1]) 只导出了函数 format_temp/1,其它函数都是局部函数,或者称之为本地函数。也就是说,这些函数在 tut5 外部是不见的,自然不能被其它模块所调用。

在 shell 测试程序时,输出被分割到了两行中,这是因为输入太长,在一行中不能被全部显示。

第一次调用 format_temps 函数时,City 被赋予值 {moscow,{c,-10}}, Rest 表示剩余的列表。所以调用函数 print_temp(convert_to_celsius({moscow,{c,-10}}))。

这里,convert_to_celsius({moscow,{c,-10}}) 调用的结果作为另一个函数 print_temp 的参数。当以这样嵌套的方式调用函数时,它们会从内到外计算。也就是说,先计算 convert_to_celsius({moscow,{c,-10}}) 得到以摄氏度表示的值 {moscow,{c,-10}}。接下来,执行函数 convert_to_celsius 与前面例子中的 convert_length 函数类似。

print_temp 函数调用 io:format 函数,~-15w 表示以宽度值 15 输出后面的项 (参见STDLIB 的 IO 手册。)

接下来,用列表剩余的元素作参数调用 format_temps(Rest)。这与其它语言中循环构造很类似 (是的,虽然这是规递的形式,但是我们并不需要担心)。再调用 format_temps 函数时,City 的值为 {cape_town,{f,70}},然后同样的处理过程再重复一次。上面的过程一直重复到列表为空为止。因为当列表为空时,会匹配 format_temps([]) 语句。此语句会简单的返回原子值 ok,最后程序结束。

由JSRUN为你提供的Erlang在线运行、在线编译工具
        JSRUN提供的Erlang 在线运行,Erlang 在线运行工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。
yout