`
litaocheng
  • 浏览: 337723 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

递归匿名函数等待某个消息(recursive anonymous functions and w

阅读更多
查看原文:http://www.wagerlabs.com/blog/2008/08/erlang-recursive-anonymous-functions-and-waiting-for-messages.html

我们有个需求,我们要等待某个消息,同时过滤指定的消息。我们可以定义一个macro,来实现。
看代码:
-define(WAITMSG(Msg, Timeout, Skip),
    fun() ->
        F = fun(F) ->
			 receive
				Msg ->
					success;
				Packet ->
					DoSkip = lists:member(Packet, Skip),
					if
						DoSkip ->
							F(F);
					    true ->
							{error, Packet}
					 end
			after Timeout ->
				{error, timeout}
			end
		end,
        F(F)
	end()).


代码中需要说明的几个地方:
1,在macro中,我们定义了一个anonymous fun, 并执行(通过最后一行end()来调用),fun() -> some expression end() 即定义了一个fun,并调用。同样 fun(Arg1, Arg2..., ArgN) -> some expression end(Param1, Param2..., ParamN)也定义并调用了这个具有多个参数的anonymous fun.
2,F fun中,我们通过将anonymous函数作为参数传递的方法实现循环,即F(F).

使用这个macro

case ?WAITMSG(login, 1000, [msg1, msg2, msg3])  of
	    success ->
		    io:format("success~n");
	    {error, Error} ->
		    io:format("error~n")
end


分享到:
评论

相关推荐

    Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I

    ### 递归函数在符号表达式中的应用及其通过机器计算(第一部分) #### 引言 本文档由约翰·麦卡锡撰写,介绍了LISP(列表处理器)编程系统的开发过程及其实现递归函数处理符号表达式的理论基础。文档发表于1960年4...

    Oracle 递归函数介绍

    Oracle 递归函数介绍 Oracle 递归函数是一种特殊的PL/SQL函数,可以用于解决复杂的树形结构查询问题。递归函数可以自我调用,以便遍历树形结构的每个节点,直到达到停止条件。 在 Oracle 中,递归函数的定义语法...

    5.6 递归思想和递归函数1

    因此,编写递归函数时必须确保存在一个或多个基本情况,使得递归调用会在某个点终止。 第二题的代码展示了一个计算阶乘的递归函数`fact`。当输入参数`num`小于等于1时,返回1,这是基本情况。对于其他情况,函数会...

    数据库设计之递归树查询

    在数据库设计中,递归查询是一种处理层级关系数据的关键技术,尤其在存在多级关联的数据结构时显得尤为重要。本文将深入探讨如何通过递归查询来解决这类问题,并着重讲解使用`WITH`语句来实现递归查询的方法,适用...

    delphi递归函数应用

    在编程领域,递归是一种强大的工具,它允许函数或过程调用自身来解决复杂的问题。Delphi,作为一款流行的Object Pascal编程环境,同样支持递归函数的使用。本篇文章将详细探讨Delphi中的递归函数及其应用。 首先,...

    数据结构:栈的应用-递归函数转非递归函数

    在这个主题中,我们将深入探讨如何利用栈来转换递归函数,将其优化为非递归形式,以提高计算效率。 首先,让我们了解递归函数。递归是一种解决问题的方法,函数通过调用自身来解决更小规模的问题。例如,阶乘是一个...

    C通过运行时堆栈支持递归函数的实现。递归函数就是直接或间接调用自身的函数。

    C通过运行时堆栈支持递归函数的实现。递归函数就是直接或间接调用自身的函数。 许多教科书都把计算机阶乘和菲波那契数列用来说明递归,非常不幸我们可爱的著名的老潭老师的《C语言程序设计》一书中就是从阶乘的计算...

    c语言二分法递归求解函数根

    假设我们有一个在某个区间[a, b]内有唯一根的连续函数f(x),我们需要找到这个根x,使得f(x) = 0。二分法的操作步骤如下: 1. 计算中间点c = (a + b) / 2。 2. 如果f(c) = 0,那么c就是方程的根。 3. 如果f(a) * f(c...

    计算递归函数调用次数

    一个递归函数通常包含两个主要部分:基本情况(Base Case)和递归情况(Recursive Case)。基本情况是能够直接求解,无需进一步递归的最简单情况。递归情况则是将问题规模减小并调用自身的过程,直到遇到基本情况...

    阿克曼函数非递归实现

    阿克曼函数是一种著名的计算上界递归函数,它在理论计算机科学中有着重要的地位,尤其是在探讨递归和计算复杂性的领域。这个函数是不可计算的,也就是说,它不能通过有限步骤的算法来解决,但是可以通过其他方法如...

    嵌入式C语言培训-C编程基础-递归函数视频教程

    递归函数由两部分组成:基本情况(base case)和递归情况(recursive case)。基本情况是问题最简单的情况,可以直接给出答案;递归情况则是将问题分解成更小的部分,通过调用自身来解决。 在C语言中,实现递归函数...

    递归函数示意图.pdf

    递归函数是计算机科学中的一种基础概念,它的基本思想是函数直接或间接地调用自身。在上述内容中,首先展示了一个简单递归函数的示例,然后又通过添加辅助函数进行了尾递归优化。 在简单递归函数的示例中,定义了一...

    省市县递归函数

    省市县递归函数

    第2章 原始递归函数

    由原始递归函数经过合成或原始递归得到的函数仍是原始递归函数.

    递归函数例子8个.rar

    在编程领域,递归函数是一种基于自我调用的函数设计技术,它在处理特定问题时,尤其是涉及到数据结构如树和图的操作时,显得尤为重要。本压缩包包含8个递归函数的例子,覆盖了多种递归应用,让我们逐一探讨这些递归...

    递归计算Ackermann函数的实现.zip

    递归计算Ackermann函数的实现.zip 递归计算Ackermann函数的实现.zip 递归计算Ackermann函数的实现.zip 递归计算Ackermann函数的实现.zip 递归计算Ackermann函数的实现.zip 递归计算Ackermann函数的实现.zip 递归计算...

    Python语言基础:递归函数.pptx

    在编程领域,递归函数是一种基于函数自我调用来解决问题的策略。在Python中,递归函数的定义简单,逻辑清晰,使得复杂问题的解决变得直观。递归函数的关键在于每个递归调用都必须向基本情况靠近,即最终会达到一个不...

    递归函数演示

    递归函数通常包含两个部分:基本情况(base case)和递归情况(recursive case)。基本情况是函数停止递归并返回结果的条件,而递归情况则是函数调用自身的部分。在计算阶乘的问题中,基本情况是n等于0或1时,阶乘的...

    C++递归函数

    二是有一个或多个递归情况(recursive case),在此情况下函数会调用自身,直到达到基本情况为止。在C++中,定义递归函数与定义普通函数并无太大区别,只是函数内部会包含对自身的调用。 以字母反向输出为例,我们...

    C语言递归函数设计

    C语言递归函数设计,如何使用递归函数进行算法计算,这样可以提高程序的质量

Global site tag (gtag.js) - Google Analytics