由于Stopover
未绑定,以下源代码无法编译。
我是第一次使用Erlang,我该如何重写它?
-module(distances).
-export([ path/2 ]).
path( madrid, paris ) ->
{ km, 1049 };
path( paris, moscou ) ->
{ km, 2482 };
path( moscou, berlin ) ->
{ km, 1603 };
path( From, To ) ->
path( From, Stopover ) + path( Stopover, To ).
此模块的用法可能是:
path( madrid, moscou ).
并且期望的答案应该是{ km, 3531}
。
2条答案
按热度按时间bjp0bcyl1#
由于中途停留未绑定,以下源代码无法编译。
我是第一次使用Erlang,我该如何重写它?
看看这个代码:
下面是当我试图编译它时发生的情况:
a.erl:5:变量“Stopover”未绑定
变量
Stopover
从来没有赋值,所以erlang不知道函数do_stuff()
应该返回什么,下面我们做一些类似的事情:变量
From
、To
是函数path()
的参数变量,在调用了path()
时,例如path(madrid, moscow)
,对变量From
赋予madrid
,对变量To
赋予moscow
。你没有给变量Stopover
赋值。您需要将
path()
重新定义为如下所示:接下来,您应该尝试看看添加元组是否真的有效:
不要!
您需要做的是使用模式匹配从每个元组中提取距离(一个整数),然后将这两个整数相加:
fnvucqvd2#
@7stud已经回答了这个问题,我想知道如何在erlang中实现这样的路径搜索,下面是一个可能的解决方案:
它使用一个外部文件来定义“已知距离”,我已经用这个来测试:
在 shell 中的结果:
下一步骤可以是每当完成新的请求时增加已知距离的列表。