Erlang 将子句转换为有趣的

如何使用Fun在一行中表示此子句 perms([]) -> [[]]; perms(L) -> [[H|T] || H <- L, T <- perms(L--[H])]. 我相信你所追求的是一种自我递归的乐趣 fun语法不能在fun主体中引用自身,因此需要使用一个技巧,其中要调用的fun是一个参数。这通常被称为ycombinator 一些示例代码可能会更好地描述它: permutator() -> fun ([], _F) ->

如何可视化Erlang gen_fsm

您知道从源代码开始以图形方式呈现Erlang gen_fsm图表的现有工具吗?此论坛帖子(“我想尝试一些工具,而不是链接gen_fsm(或其他Erlang fsm)和dot(graphviz)文件”)可能对您有用: gen_fsm中的下一个状态可以是静态源分析在一般情况下无法找到的计算值 当然,;使用类型注释是可能的,但是您也可以明确地写下您的状态转换,从中生成.dot文件。当您说要分析Erlang程序的源代码时,我想知道您是否碰巧对程序本身的依赖性分析感兴趣。(您可能只想分析您正在编写的FSM

Erlang 如何控制正在运行的辅助进程的数量?

就gen_server而言,erlang中的设计模式是什么,用于创建固定数量的工作进程,并向它们提供“作业”以执行某些操作?每个辅助进程都与具有连接限制的外部服务进行通信。被认为是无限的“工作”数量。在C中,我会通过创建一个工作线程池和一个异步线程池来实现这一点。由互斥锁保护的队列(容量有限),用于向池中提供提交者的作业。让gen_服务器在您的工作进程上放置一个监视器,当一个进程死亡(作业完成或崩溃)时,会生成另一个进程。为什么需要固定数量的工作进程?@rvirding,我希望工作人员的数量是固

Erlang错误处理,X在';试试';

有谁能告诉我为什么这段代码在“try”中回吐X是不安全的,我知道为什么,但更重要的是如何修复它 try X = lists:append(lists:zipwith3(fun(X, Y, Z) -> [X, Y, Z] end, Data1, Data2, Data3)) of MP -> X catch K -> (X = 0) end. %MP = [lists:zipwith3

Erlang 如何发出Riak搜索查询?

我已经使用Riak大约一个月了,我刚刚发现了Riak搜索。 所以我安装了它,并插入了一个非常基本的json文档进行测试 以下是我使用的命令: curl -X PUT http://127.0.0.1:8098/riak/json/test -H "Content-Type: application/json" -d @test.json test.json所在的位置 { "firstName": "John", "lastName": "Smith" } 所以根

在Erlang中匹配二进制文件

例如: <<Sync:11,B:2,C:2,D:1>> = <<2#1111111111101011>>. ** exception error: no match of right hand side value =。 **异常错误:右侧值不匹配 为什么??我认为变量Sync必须是2#11111111,但它不是。如果您在右侧指定位数,它将起作用 <<Sync:11,B:2,C:2,D:1>> = <<2#1

Erlang 如何通过命令行作为守护进程启动应用程序?

这是我目前的惯例 sudo nohup erl -sname foo -pa ./ebin -run foo_supervisor shell -noshell -noinput & 其中shell函数看起来像这样 shell() -> {ok, Pid} = supervisor:start_link({local,?MODULE}, ?MODULE, _Arg = []), unlink(Pid). 如果我不从shell上断开链接,它会因为某种原因立即停止。

Erlang:如何让多个版本同时运行?

是否可以让钢筋创建的多个发布同时运行?我有一台服务器,我想在其中同时运行不同的版本来测试它们。问题是当我这样做时: rel/myapp\u a/bin/myapp\u a站 它设法停止正在运行的我的虚拟机myapp\u b 如何让它们作为自己的实体运行而不相互干扰?首先,我要检查两个节点是否相互连接: 在一个或每个节点上运行 Eshell V5.7.5 (abort with ^G) 1> nodes(). [] 并确保列表为空或仅包含应连接的其他节点 通过调用检查节点是否可以连接,并

Erlang列表筛选器语法

我正在尝试编写一些Erlang来过滤以下形式的数组: [{dakota, "cold and snowy"}, {california, "perfect weather"}] % and so on 这是我得到的-当我试图从werl生成.beam时,我得到了一个语法错误 -module(matcher). -export([findkeywords/2]). findkeywords(Word, Arr) -> IsMatch = fun({Key, Desc}) ->

Erlang 如何正确使用gen_tcp:recv

我在编写简单的http客户端时,遇到了以下问题,我从offficial doc复制了do_recv,但它的工作方式很奇怪: do_recv(Sock, Bs) -> case gen_tcp:recv(Sock, 0, ?TIMEOUT) of {ok, B} -> gen_tcp:shutdown(Sock, write), % <-- this appears to fix the problem! d

Erlang应该如何处理公共数据?

假设我正在使用Erlang构建游戏服务器 每个用户都会检查一些东西(如查找最接近的玩家),因此通常会有一个管理类 在上面的例子中,我们使用互斥锁 据我所知,Erlang通常会为每个TCP连接(用户会话)创建新的Erlang进程。 那么,用户会话列表如何循环 如果我有这些用户会话的父进程,并询问父进程,这可能是一个瓶颈?现在,在继续之前,您可以查看以下问题和答案:、和 现在,了解和。然后你也许可以看看。创建一个进程来保存状态数据(特别是针对游戏)是危险的,因为当进程退出时,状态可能会丢失。重启崩溃

在Erlang中使用spawn_链接尝试捕获

我是新来的二郎。现在,我正在学习过程的链接。 在接下来的实验之后,我有点困惑: 3> process_flag( trap_exit, true ). false 4> try 1+1, spawn_link( unknown_module, unknown_function, [] ) of 4> Pid -> Pid 4> catch 4> _:_ -> err 4> end. <0.37.0> 5> =ERROR REPO

Erlang:获取多主机群集上所有节点的列表

您可以使用net\u adm:names()获取主机epmd上所有节点的名称。但是,如果您的集群由第二台主机(因此是第二台epmd)组成,该怎么办。如何获得两台主机上所有节点的列表?net\u adm:world/0可能会有所帮助 它“调用Erlang主机文件.hosts.Erlang中指定的所有主机的名称(主机),收集回复,然后在所有这些节点上计算ping(节点)。返回成功ping的所有节点的列表 更多信息:

Erlang 我可以陷阱退出(self(),kill)吗?

当我读到LearnyYouSomerlang.com上的一篇文章时,我有一个问题。 它说: 异常源:退出(self(),kill) 未跟踪结果:**异常退出:已终止 捕获结果:**异常退出:终止 哎呀,看那个。看起来这一个实际上是不可能陷阱。让我们检查一下 但它不符合我用代码blow测试的内容: -module(trapexit). -compile(export_all). self_kill_exit()-> process_flag(trap_exit,true),

Erlang shell-控制两个进程

我有一个关于erlang shell和erlang vm的问题 我们必须用Erlang编写简单的客户机-服务器应用程序,但只针对本地环境,所以没有套接字或任何东西 我想写一些类似于通信器服务器的东西,人们可以注册并向其他人发送消息。问题是,如果我打开erl并启动我的服务器/注册它,我只能从erlangshell控制一个进程,因此这没有什么乐趣,因为我不能与任何人交谈 是否可以打开连接到同一vm实例的两个erlang shell或编译客户端程序,从erlang shell启动服务器,然后在同一vm

Erlang 到\u erl程序输出

当我尝试使用以下命令连接到Erlang shell时: to_erl /tmp/erlang.pipe.1 命令的输出如下所示: Attaching to /tmp/erlang.pipe.1 (^D to exit) (search)`': (node@mypc)1> 那是什么“(搜索)`:“ 我使用以下命令启动要连接到的Erlang节点: run_erl -daemon /tmp/ /tmp "erl -sname node" 我认为这是OTP-10739项中提到的

只要我有一个非依赖异步函数,就应该在Erlang中使用spawn吗?

如果我有一个可以在没有任何依赖项的情况下异步执行的函数,并且没有其他函数直接需要它的结果,那么我应该使用spawn吗?在我的场景中,我希望继续使用一个消息队列,因此生成将解除我的阻塞循环,但如果在其他情况下我可以尽可能多地分发函数调用,这会对我的应用程序产生负面影响吗 总的来说,使用Spawn的优缺点是什么。首先想到的是参数的大小。它们将从当前流程复制到新流程,如果参数很大,则可能效率低下 另一个可能出现的问题是虚拟机的进程数量过多,导致系统变得不负责任。您可以通过使用工作进程池或特殊的监视进程

Erlang 由于语法错误,Erl文件未编译

我试图找出这段代码的错误,因为它给了我错误,使我无法将其正确编译到beam文件中。我看不出语法有什么问题。是否有一个IDE可以帮助我 以下是错误: parallels@parallels-Parallels-Virtual-Platform:/var/backend/ejabberd_modules# erlc -I /var/tmp/ejabberd/src/ mod_stanza_ack.erl ./mod_stanza_ack.erl:97: syntax e

如何获取erlang崩溃转储文件?

我的程序在执行过程中崩溃,并在控制台上写入分段错误(内核转储)。但当前工作目录中没有任何生成的文件。 问题是在哪里可以找到生成的崩溃转储文件? 我正在使用Ubuntu13.04/Erlang R15B01试试这个,它在大多数情况下都很有用 您还可以查看我不推荐的解决方案,我将其视为最后一个解决方案。Linux内核转储和Erlang崩溃转储不是一回事。如果您遇到分段错误,并且无法找到核心转储,则需要检查操作系统配置。执行“cat/proc/sys/kernel/core_pattern”以查看L

Erlang-使用预定义数据创建列表

我刚开始玩二郎,发现了一些让我很困扰的东西。我认为这仅仅是因为Erlang是我的第一种类似函数的语言 所以,我想创建一个包含一些预定义数据的列表,比如[1,1,1,1,1]或[a,a,a],我找不到任何用于此的Erlang函数?有吗?或者,唯一的方法是手动创建这样的功能,如下图所示: -module(listhelp). -export([create/2]). create(NumberOfElements, Element) -> create(NumberOfElemen

对Erlang端口映射程序守护进程短路

给定远程beam.smp服务的已知TCP端口和名称以及已知cookie,是否可以短路Erlang分发协议的Erlang port Mapper守护程序握手阶段,并直接建立到目标beam.smp服务的Erlang shell 协议记录如下: 在这里: 但我不清楚recv_challenge/send_challenge身份验证是否通过Erlang端口映射程序守护程序或绑定到特定端口的beam.smp服务进行 感谢您的时间。在Erlang VM(beam或beam.smp)之间进行身份验证。ep

Erlang 雅司路

如何在雅司病中进行路由?类似于ASP.NET MVC或Rails中的路由 当然,Erlang是一种没有oo世界概念的函数式语言;但是可以将http://[domain].[com]/controller/action/arg1/arg2/路由为对名为“controller”的模块的GET请求,该模块具有“action/2”函数,或者已经存在这样的库。我不知道是否存在这样的模块,但我看不到模块这样做的好处: out(Arg) -> Uri = yaws_api:request_url

Erlang 数据文件和ETS表之间的平均大小比是多少?

我正在评估如何使用Erlang ETS来存储一个大的内存数据集。我的测试数据源是一个仅消耗350 MB磁盘的CSV文件 我的解析器逐行读取数据并将其拼接到一个列表中,然后创建一个元组,并使用“bag”配置将其存储在ETS中 在ETS中加载所有数据后,我注意到我的计算机的8GB内存已经全部用完,操作系统已经创建了虚拟内存,占用了接近16GB的内存。erlang的Beam进程所消耗的内存似乎是磁盘数据大小的10倍 以下是测试代码: -module(load_test_data). -author("

Erlang relx——所有的输出文件都是什么?我如何使用它们?

本着对OTP更深入理解的精神,我创建了一个极简的、基本的应用程序,并将其与erlang.mk和relx打包在一起 所有作品如广告所示。但是relx文档和教程中似乎缺少一些关键信息,例如,如何处理relx创建的所有文件和目录 例如,如果我希望在不同的硬件上运行我的发行版,需要移动哪些文件,如何启动和停止发行版 还有,关于各种输出文件,还有什么我应该知道的吗 以下是输出: _rel bin install_upgrade.escript min

基于erlang中的配置参数启动依赖项

我的一些应用程序依赖项仅在设置了给定参数时使用。我需要知道启动这些依赖关系的最佳方法是什么。我使用的是Erlang R14B04,不能使用其他版本 我有两个选择。第一个: %% file myapp.erl start() -> dep1:start(), dep2:start(), application:start(myapp), case application:get_env(myapp, use_app3) -> true -

列出Erlang中进程可用的可用记录

记录是编译时结构。记录信息和is记录识别已编译的记录及其结构。是否有办法询问VM已定义哪些记录可供流程使用?我对获取每个记录定义的内部元组表示感兴趣 我想做的是: -记录(汽车,{make=honda}) 获取_记录(汽车)-> %%这里有些神奇的东西最终会变成这样 {汽车,{制造,本田}}甚至更好{汽车{}的确是。%%当Car='Car'时,正如您所说,记录只是一个编译时构造,所以一旦编译的记录只是元组,这就意味着在运行时没有留下可用的信息,但由于您提到了这两个函数,我很好奇,并检查了它们是如

连接到Riak并通过Erlang存储数据

我的测试模块的目标是开始将我自己输入的数据存储在本地节点中 我已经在我的计算机上设置了一个本地节点。我还通过riak attach将一个新的erlang模块连接到它 在my module test.erl中,到目前为止只有riakConnect功能: riakConnect() -> riakc_pb_socket:start_link("127.0.0.1", 8087). 我在同一个模块中还有一个接收部分,它看起来类似于(现在它被注释掉了): 问题是,当我附加文件时,我会进入节点

Erlang 使用自定义mysql模式的模块扩展ejabberd?

取而代之的是,我使用了一个定制的MySQL模式(因为遗留的原因) 我将在某些活动上做一些DB操作,如乒乓球、乒乓球、Msg Delivered、Msg read,最重要的是获取/设置花名册列表和宣布出席(所有这些都在我自己的模式中) 然而,ejabberd似乎一直在使用ejabberd.sql,它的源代码非常依赖于它。由于我不知道它的依赖性,我最不愿意做的事情就是修改源代码 可能的想法: 假设我通过编写自己的模块来扩展ejabberd,那么mod_花名册_odbc有什么用呢?我只是不想失去eja

Erlang 模式匹配长生不老药记录Aganist结构

有没有办法将记录与结构进行模式匹配?例如,给定以下记录和结构 struct = %User{name: "", twitter:""} record = {User, "mossplix ", "@mossplix"} 您需要手动匹配字段 defmodule Test do def foo(%User{name: name, twitter: twitter}, {User, name, twitter}) do IO.puts "match :)" end def fo

Erlang Ejabberd隔离用户组

我想隔离Ejabberd的一些用户。我的意思是,只有列表中的特定用户(数据库、json或任何其他格式)可以交互(聊天、订阅等)。这是通过开发插件实现的还是我需要破解Ejabbed代码?通过开发插件实现的。例如,您可以在ejabberd中使用filter_数据包hook 您可以在上找到钩子列表。filter\u数据包完成此任务。如果其他人想要更多的细节,这里有一个简单的例子

Erlang,尝试使用多个响应进行gen_server:调用

尝试在项目中使用OTP样式,得到一个OTP接口问题。什么解决方案更受欢迎/美观 我所拥有的: 带有mochiweb的web服务器 一个过程产生了许多(1000-2000)孩子。 子级包含状态(网络流速度)。如果需要,处理将消息代理给子级并创建新的子级 在mochiweb中,我有一个页面,显示了所有演员的速度,乳清是如何制作的: nf_collector ! {get_abonents_speed, self()}, receive {abonents_speed_

在erlang中从列表中配对

我试图在erlang中对排序集中的项执行一个处理,我使用eredis调用ZRANGE键0-1和cores,问题是它返回类似[,]。如何有效地在这些项上运行函数f,以便进行这些调用:f(,),f(,)?我用类似的方法解决了这个问题 f([X,Y|T]) -> [do_the_job(X,Y)|f(T)]; f([]) -> []. 然后打电话: f(List). 有更有效的方法吗?一种优化的方法是使用尾部递归。您可以将列表传递到do/1函数中,它会生成一个空列表,用于存储在给定列表

Erlang 二郎;无重复列表

我正在做一些可怕的事情,但我不知道如何让它变得更好 我正在形成一个名为SomeList的列表中元素的所有成对和,但我不想看到重复的元素,我想我想要所有可能的成对和: sets:to_list(sets:from_list([A+B || A <- SomeList, B <- SomeList])) SomeList不包含重复项 这是可行的,但效率非常低,因为集合转换之前的原始列表非常庞大 有更好的方法吗?此模块允许您在使用列表理解、集合或ets时比较执行时间。当然,您可以在此比较

Erlang hackney:使用附件在mailgun.com中发送邮件

我正在尝试使用hackney通过mailgun.com发送电子邮件,我在发送附件时遇到了一些问题(需要多部分) 基本上我的兴趣领域是: from to subject text attachment File attachment. You can post multiple attachment values. Important: You must use multipart/form-data encoding when sending attachments. 我尝试了以下方法: P

Erlang 如何使用';它已经从一个模块运行了吗?

我昨天问了一个关于在另一个应用程序中使用一个应用程序的问题。 假设我想在新模块y中使用名为x的应用程序 x已经编译,为了简单起见,假设它已经在本地主机上运行,目标是在不同的节点上运行这两个组件 如何从y中调用x的函数? 类似于rpc:call(Node,x,Fun,Param) 此外,使用rpc模块是否需要任何(网络)设置 重要 如果无法测试两个节点之间的连接,请确保使用命令行标志-name,并且在net\u adm:ping/1调用中包含整个名称。e、 g.如果您将节点命名为x@localho

Erlang ejabberd如何将脱机聊天保存到spool表中

我使用ejabberd开源服务器来实现我的聊天应用程序。它成功地传递和接收消息,但有时传递确认和读取确认会丢失 如果客户端将连接关闭会话节发送到ejabberd服务器,则进一步的消息肯定存储在spool表中。考虑客户端网络中存在问题的情况,客户端断开连接而不向服务器发送关闭会话节。服务器假定客户端仍然在线,并且不将消息存储到假脱机表中 但当客户端联机时,所有挂起的消息都会传递给客户端(spool加上服务器认为客户端联机时的一些消息) ejabberd在哪里存储脱机消息而不是假脱机表?如果您没有正

如何在io:get_行(Erlang)中包含变量

有没有办法将变量放入io:get\u line()code?我试过了 io:get_line("~s: ",[Variable]). 但它不起作用。所以我的问题是,是否还有其他实现方法?您可以使用以下函数: 从标准输入(IoDevice)读取字符,并用提示符提示。按照格式解释字符。格式包含指导输入解释的控制序列 您可以先将格式字符串和参数传递到io\u lib:format/2,然后将其发送到io:get\u line/1: 1> Variable = "Name". "Name" 2&

Erlang mod_花名册.erl中的错误记录

我正在尝试创建一个定制的mod_shared_花名册,这样它就可以将所有需要的vcard数据以JSON格式发送到客户机的XS字段中。我重新编写了从原始mod_shared_lotster.erl获取用户花名册的方法: 这很难理解,但在localhost上一切正常,但是当我在真正的服务器上加载beam文件时,我得到了错误。 有人能帮我吗?{badrecord,花名册}表示被视为记录的值实际上不是记录。看起来故障出现在基于行号的encode_item/1中,其中传入的项目被假定为花名册记录。必须将一

基于元组的Erlang模式匹配

如果我写的很简单: [X || X <- [1,2,3,4,5,6,7,8,9,10]]. 如果我写: [{a,b} || {a,b} <- [{1,2},{2,3}]]. [{A,B} || {A,B} <- [{1,2},{2,3}]]. 简单的问题-为什么?生成器{a,b}生成器{a,b}如果我写: [{a,b} || {a,b} <- [{1,2},{2,3}]]. [{A,B} || {A,B} <- [{1,2},{2,3}]]. 如果我写:

Erlang 在注册表中注册一个池童池

启动后是否可以在注册表中注册:poolboy池(:gproc或elixir 1.4中的注册表) 我需要在池上实现一些pub/sub架构。我想在同一个别名下注册多个池 Registry有:duplicate,和:gproc有:p,但它们似乎都不能与:通过元组一起工作,所以我不能在我的池的名称中使用它。看起来Registry只允许在给定名称下注册当前进程 因此,要使用注册表,您需要启动一个进程来充当每个Poolboy池的代理,例如GenServermodulePoolProxy defmodule

在Erlang/Elixir中,使用文件描述符打开端口有哪些用例?

我在Elixir中浏览了端口模块,发现可以通过指定文件描述符打开端口。例子 # elixir iex(1)> Port.open({:fd, 5, 10}, []) #Port<0.1205> # erlang 1> erlang:open_port({fd, 5, 10}, []). #Port<0.435> #长生不老药 iex(1)>端口开放({:fd,5,10},[])) #港口 #二郎 1> erlang:open_端口({fd,5,10},[

Erlang 我是否需要为少数几个ZeroMQ客户端启动多个服务器端工作程序?

我正在使用erlang中的Chumak,打开一个路由器套接字 我有几个(大约4个)客户端使用Python zmq库向该服务器发送REQ请求 大多数情况下工作正常,但有时客户机会出现断开连接问题(自动重新连接在客户机代码中,并且可以正常工作)。我发现,当一个客户端连接中发生错误时,它似乎也会转移到其他客户端,我得到了很多 **{noproc,{gen\u server,call,[,incomming\u queue\u out]}, 在服务器上 在服务器端,我只是打开一个chumak套接字并循环

erlang epmd无法运行

我正在尝试将ejabberd连接到远程服务器上的节点,但无法ping节点。两个节点都使用-name'运行n1@host1.my“和-name”n2@host2.my“通过内核选项-kernel inet\u dist\u listen\u min 4370 inet\u dist\u listen\u max 4370,可以访问端口4370(在主机1.my上使用telnet进行检查): 在erl中: net_adm:names(). {error,address} 这意味着ep

Erlang genserver.call超时数据库连接出现Elixir错误

在我安装wxWidgets libs并重新安装我的erlang otp版本以运行“:observer.start”后,我的应用程序出现以下错误: 我正在使用evm管理我的erlang otp版本 [info] GET /dashboard/admin [error] #PID<0.1290.0> running DashboardWeb.Endpoint (cowboy_protocol) terminated Server: test.lvh.me:5000 (http) Requ

Erlang 查找元组列表中的所有元组

我目前正在攻读计算机科学硕士的第二学期,正在修分布式系统编程课程。因此,我们应该每周提交练习,其中也包括Erlang中的编码练习 由于这是本课程的第二周,我们才刚刚开始学习Erlang,这是第一个练习,我们应该在一个模块中实现6个函数。前5个功能我可以自己轻松完成,但第6个功能让我完全不知所措。对于这个函数,我们应该编写一个接受2个输入的函数:一个表示键值对的元组列表和一个包含要搜索的键的列表。然后,该函数应该在整个列表中搜索所有出现的这些键并返回它们 这是关于Erlang的第一个练习,目的是让

Erlang/Rebar3-如何将应用程序添加到发行版,但不启动它?

我有一个伞形项目,包括主应用程序,app1,app2。主应用程序可以单独工作,也可以使用和管理app1和app2 关于启动app1和app2的决定在外部(特殊配置文件,由用户填写) 我使用了rebar.config,它的一部分: {lib_dirs, ["apps"]}. {sub_dirs, [ "apps/main_app", "apps/app1", "apps/app2" ]}. {relx,

上一页   1   2   3   4   5    6  ... 下一页 最后一页 共 131 页