• 我也学erlang(三)


    开胃菜:

      同名不同目的函数:所谓目就是指函数的参数。它们会被认为是两个不同的函数,除了它们的名字恰巧相同之外,它们彼此没有再没有任何联系。

    正题:

    fun

      fun就是一个匿名函数,所谓匿名,是因为它没有名字。我们来做点实验,先定义一个fun函数,然后把它赋给Z。

      

    11> Z=fun(X)->2*X end.
    #Fun<erl_eval.6.111823515>

    当定义fun函数时,系统通常会打印出来一串奇怪的数字,先不用管他。

    输入:

    12> Z(2).
    4

    fun可以拥有任意数量的参数。比如:

    13> Hypot=fun(X,Y)->math:sqrt(X*X+Y*Y) end.
    #Fun<erl_eval.12.111823515>
    14> Hypot(3,4).
    5.0

    Erlang是一种函数式编程语言,因此,除了几个别情况,fun既可以作为函数的返回值,也可以作为函数的参数。这些以fun为参数或者返回fun的函数,称为高阶函数。

    以fun为参数的函数

      lists是标准库中的一个模块,从中导出的很多函数都是以fun作为参数的。其中,最有用的是lists:map(F,L).这个函数将fun F应用到列表中的每个元素上,然后返回一个列表。

    假设刚刚的Z函数我们重新定义为Double。

    15> Double=Z.
    #Fun<erl_eval.6.111823515>
    16> L=[1,2,3,4].
    [1,2,3,4]
    17> lists:map(Double,L).
    [2,4,6,8]

    另一个有用的函数是lists:filter(P,L),它返回一个新列表,新列表由满足条件P(E)的元素组成。

    我们定义一个函数Even(X),

    18> Even=fun(X)->(X rem 2)=:=0 end.
    #Fun<erl_eval.6.111823515>
    19> Even(8).
    true
    20> Even(7).
    false
    
    21> lists:map(Even,[1,2,3,4,5,6,7,8]).
    [false,true,false,true,false,true,false,true]
    22> lists:filter(Even,[1,2,3,4,5,6,7,8]).
    [2,4,6,8]

    返回fun的函数

      

      

  • 相关阅读:
    快速排序算法
    excel取值
    5.管理控制文件和日志文件
    贝叶斯决策与参数估计小结
    Kernel Methods (5) Kernel PCA
    Kernel Methods (4) Kernel SVM
    Kernel Methods (3) Kernel Linear Regression
    Kernel Methods (2) Kernel function
    Kernel Methods (1) 从简单的例子开始
    PCA算法是怎么跟协方差矩阵/特征值/特征向量勾搭起来的?
  • 原文地址:https://www.cnblogs.com/church/p/2591957.html
Copyright © 2020-2023  润新知