我对Erlang非常陌生,我正在尝试编译第一个程序,并且在编译时遇到语法错误。

我得到的语法错误指向未定义的第2行filter_inside X之前最后一行的语法错误。

功能

-module(functions).
-export([filteri/2]).

filteri(_, []) -> 
                    []; 
filteri(P,[X|XS]) ->
                    [(map(P) X)|filteri P XS].

我已经尝试调试了大约一个小时,但没有成功,我想知道是否有人可以帮助我确定导致无法编译的代码的含义。

提前谢谢了!

===============>>#1 票数:4

Erlang用分号分隔子句;

语句由逗号分隔,

只需使用[]; 在第五行。

最后一行也坏了。 要在元素Head添加列表Tail使用[Head|Tail]包括方括号。

函数调用看起来像Fun(Arg1, Arg2, ...)

Erlang区分大小写。 x是一个原子(您可能将其视为字符串常量),而X是变量X

比显式递归更容易使用的是列表理解[Fun(X) || X <- XS] [Fun(X) || X <- XS] (或[Fun(X) || X <- XS, Predicate(X)] )。

我想你可以用

filter_inside(Fun, XSS) ->
    [ [Fun(X) || X <- XS] || XS <- XSS ].

在您的解决方案中,您可以将其用作最后一行:

[list:map(P, X)|filter_inside(P, XS)].  % Mind the function call syntax.

Erlang在-export行中报告了一个问题,因为该函数包含错误,因此名称未知。

另一条评论:使用filter_inside(_, [])作为加快速度的最后一个子句。

===============>>#2 票数:2 已采纳

最后一行[(map(P) X)|filter_inside P XS]. 应该是[P(X) | filter_inside(P, XS)]. [P(X) | filter_inside(P, XS)]. 语法需要更正。 您正在寻找map apply和predicate来获取结果,即实现lists:map

例如: lists:map(fun(A)->A*2 end, [1,2,3,4,5]). 得到等于[2,4,6,8,10]

然后,在Erlang中,您还可以像这样编写以利用尾部递归优化:

-module(functions).
-export([filter_inside/2]).

filter_inside(P,L) ->
    filter_inside(P,L, []).

filter_inside(_, [], Acc) -> 
    lists:reverse(Acc); 
filter_inside(P,[X|XS], Acc) ->
    filter_inside(P, XS,  [P(X) | Acc]).

  ask by AnchovyLegend translate from so

未解决问题?本站智能推荐:

1回复

Erlang语法错误

当我尝试编译我的erlang脚本时,我不断收到此错误: 这是我的资料来源: 第55行是最后end
2回复

Erlang基本语法错误

我尝试学习Erlang。 我已经安装了运行时,但无法使其运行。 如下代码: 有效,但以下内容不起作用 要么 要么 等等都产生“ 1:之前的语法错误:'->'”我尝试了本教程中的“ word_count”: http ://www.ybrikman.com
1回复

erlang映射语法错误

我在Mac(OS X)和Ubuntu 14.04 PC上安装了erlang。 尝试在Mac上创建地图有效,但是在我的ubuntu pc上完全相同的代码会产生错误。 我已经在另一台计算机上尝试过它,并且在那儿也可以工作。 这是代码: 其示例代码来自: http : //erlang.
2回复

Erlang 20.2的语法错误

我遇到了Erlang 20的有线问题。 我使用rebar3 as prod tar来生成存档文件,并使用它来基于erlang:20.2-alpine构建docker映像。 在我的Macbook Pro上,可以调用bin/app start但是在目标docker容器上,它告诉我: er
1回复

erlang中的基本语法错误

我试图在下面的代码段中发现语法错误,但是我只是看不到出了什么问题。 我确定它是基本的,但是我只需要对这段代码有新的了解: “。”之前的语法错误。 第50行。第50行是此代码段的最后一行
2回复

Erlang中的语法错误

我是该语言的新手,试图弄清楚一个简单函数的格式,该函数返回二次方程的根。 我犯的语法错误是什么? 当我在外壳中输入“ c(ps04)”(其中ps04.erl是我编写函数的文件)时遇到的错误是:
1回复

结束前的Erlang语法错误

我正在尝试制作一个点和盒子游戏,但是当我尝试执行此代码来评估是否已经绘制了一个墙时,我得到一个'结束前的语法错误'错误。 编码:
1回复

之前的Erlang语法错误:“结束”

我最近开始学习erlang,但是遇到了一个错误,这让我感到困惑。 错误是syntax error before: 'end'最后一行syntax error before: 'end' 。 我看过一些试图查找错误的示例,但此刻我完全迷失了。 有任何想法吗?
1回复

Erlang,使用防护之前的语法错误

我在“ where”第7行(此代码的第1行)之前出现语法错误。 我不确定为什么会抛出该错误,但是我仍然是erlang的初学者,所以我可能会错过一些东西。
1回复

Erlang语法错误不清楚

我刚开始使用Erlang。 我正在尝试if语句。 我发现了一种我不了解的特殊行为。 以下语句可以正常工作。 但是,以下内容在if附近显示错误语法: 我的问题是为什么会发生错误。 如果没有if语句,则Val = cal(Arg1)的部分效果很好