初次学习erlang的笔记

由于工作的需要,开始学习erlang这门编程语言。下面是自己整理的一些学习笔记。


第二章 入门

“/” 永远返回浮点数, N div M 和 N rem M是用于整数除和取余数。  5 div 3 = 1, 5 rem 3 = 2.

原子是使用小写字母开头的, 使用单引号引起来的字符也是原子。
可以用$符号来表示字符的整数值。
I = $a. ----------------------->得到的结果为:97

命令f().会让shell释放所有绑定的变量。

第三章 顺序编程

-export([cost/1]). 表示导出一个cost函数,并且这个函数有一个参数。


fun()匿名函数可以带任意多个参数。


高阶函数:能够返回fun或者接受fun做为参数的函数,都被叫做高阶函数。


导出用多个函数格式:-export([total/1, sum/1]). 分号隔开


断言是一种用于强化模式匹配功能的结构,用when关键字开头表示,断言分号表示或,逗号表示与。


列表解析:记号[F(X) || X <- L]  代表由F(X)组成的列表, 其中X的值取决于列表L。
例如: L = [1, 2, 3, 4, 5]. 
[2 * X || X <- L].-------------->[2, 4, 6, 8, 10].


提取某个列表的字母的值:
I = $a.


记录:本质是元组, p44
-record(person, {name, age}). 其中person是记录的名字,name和age是记录中的字段名,这些名字都必须是原子。
在shell中用rd命令定义记录。 rd(person, {name, age}).


-module(person).
-export([new/2]).


-record(person, {name, age}).


new(Name, Age) ->
    #person{name=Name, age=Age}.


1> person:new(ernie, 44).
{person,ernie,44}




小于或等于:2 =< 3. (ps:有些变态)
等于或大于:2 >= 3.


格式化输出的时候都要写成列表的形式(开始很不习惯啊)。

而会发现,erlang 是有两种表达方法的: 
1.  ,  和  ;  

2. andalso   和   orelse

然而,这两种表述是有区别的:

首先,假如条件是这样的  X >= N; N >= 0

          当前半句出现异常时候,后面半句还是会执行,而且结果可能回是true;

然后,假如条件是   X >= N orelse N >= 0

          当前半句出现异常时候,后面半句是会被跳过的,返回的结果就是异常


而其实两种都有各自的优缺点,所以,很多情况下都是把他们两种混合起来使用,达到业务需求



第四章异常

内建的异常产生函数:
exit(Why).终止当前进程。
throw(Why).这个函数用于抛出一个调用者可能会捕获的异常。
erlang:error(Why). 这个函数用于抛出那些“崩溃错误”,致命错误。


ExceptionType是原子throw、exit、error中的一个,告诉我们异常是以什么方式产生的。


第五章顺序编程进阶

BIF内建函数。
尽量少使用apply。


可以在模块代码中添加 -compile(export_all).来导出所有的函数。


io:format("~w~n", ["\b\d\e\f"]).


引入包含文件:-include(Filename).
引入库中包含的文件:-include_lib("/kernel/include/file.hrl").


++和--只对列表有用。


在模式匹配中使用匹配操作符。


左结合:从左边开


以下划线开始的变量,消除警告。


<<2:2, 1:1>>得到的结果为<<5:3>>  从左往右开始顺序过来填充,类似于字节流。




小问题集锦:
apply功能:让你向一个模块中的某个函数传递参数并调用此函数。它与直接调用的区别在于模块和函数名可以可以动态计算。


-import(lists, [map/2]).-------------------->导入某个模块中的某个函数。
-export([a/2, b/1]). ---->从当前模块导出函数。




epp:在erlang模块被编译之前,首先会被一个名为epp的erlang预处理器进行自动处理,这个预处理器会扩展任何存在于源文件的宏,并且插入任何必需的包含文


~p是表示对一个列表不做任何修饰的打印原始结果。


函数引用: 引用一个当前模块或者外部模块所定义的函数。
fun LocaFunc/Arity. ----------------------->引用一个当前模块的函数名为LocaFunc的函数.
fun Mod:RemoteFunc/Arity. ----------------->引用Mod模块中的RemoteFunc外部函数。 




包含文件:
-include(FileName). ------------------>包含扩展名为.hrl的包含文件
-include_lib("kernel/include/file.hrl").------------------>包含特定的库文件。


列表操作符++和--:
++和--是对列表进行添加和删除的中缀操作符。


宏:
宏的语法:-define(Constant, Replacement).
例如:-define(marco1(X, Y), {a, X, Y}).
?FILE 当前文件名;
?MOUDLE 当前模块名;
?LINE 当前行号。


进程字典:每个进程都有自己的私有存储数据,叫做进程字典。


短路布尔表达式:orelse和andalso,如果是用or或者and对两边的参数都会进行求值。


比较表达式:
判断是否全等最好用 =:= 。
=<        小于等于
>=  大于等于
==  等于
/=  不等于
=:=  全等于
=/=  不全等于


下划线变量:主要用于命名一个不准备使用的变量or为了方便调试。

第六章 编译并运行程序

停止erlang系统运行:
ctrl+z
erlang:halt().
q().--------------------------- 最常用,


erlang shell的内建命令, 使用help().查看。


第八章 并发编程

并发原语:
Pid = spawn(Fun). 创建一个进程
Pid ! Message   向pid进程发送消息
receive .......end  接收消息


self(),得到自己的进程号。


毫秒为单位。


p104的area_server.erl是并发编程的模型, p106的area_server_final.erl碉堡了。


一条消息处理完了就会移出进程的消息邮箱。


带超时的receive加了个after


注册进程:register


  第15章 ets和dets:大量数据的存储机制





深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值