没有合适的资源?快使用搜索试试~ 我知道了~
首页经济模拟器:函数式编程的静态方法应用
经济模拟器:函数式编程的静态方法应用
0 下载量 173 浏览量
更新于2024-06-16
收藏 1.53MB PDF 举报
本文档探讨了"经济模拟器函数式编程的静态方法",由作者安托万·卡兹契奇撰写,并于2019年在巴黎-北巴黎第十三大学完成。该研究专注于将函数式编程的概念应用于经济模拟器的设计和开发,尤其是利用Monads这一关键概念来管理模拟过程中的可变性和副作用。Monads是函数式编程中的一种设计模式,它提供了一种封装和处理副作用的统一方式,使得代码保持纯函数式的特性。 文章首先介绍了Monads的基本概念,包括函数式编程的导论和模拟可变效应的单子(一种数据结构,用于管理状态)。作者详细解释了单子如何通过抽象类型来确保程序对状态的正确访问,以及如何通过谓词控制其行为。此外,文中还讨论了单子的优化,如内存管理、递归使用、单子状态和写入器的关系,以及现有的解决方案。 在实现部分,作者提到一个名为Jamel的经济模拟器作为案例研究,展示了单子在其中的作用。模拟器中运用了单子来处理经济模型中的动态变化,如可变数据结构算法的实现,以及单子如何与全局易变性问题进行协调。文章也涉及到了演员模型(Actor Model)和Akka(一种分布式计算框架)的应用,强调了这些技术在大规模并行模拟中的作用。 值得注意的是,本研究发表在开放存取档案馆HAL,这意味着它可供全球科研人员免费获取和分享,促进了学术交流和知识传播。整个论文的结构严谨,深入浅出地结合理论和实践,为经济模拟器的函数式编程提供了实用的方法论。 这篇文章对于想要了解如何在经济模拟器中应用函数式编程和Monads技术的专业人士来说,是一份宝贵的学习资料,展示了将这些高级编程技巧与实际经济学模拟相结合的可能性。
资源详情
资源推荐
11
第一章
用单子进行
在单子部分的介绍性章节中,我们介绍了编程语言及其特征,观察到的问题及其解决方案是基于这些特征
的。我们介绍了使这些观察成为可能的背景:经济模拟器编程
本节中使用的编程范例是函数式编程,特别是在
值调用
中,但也会有一些关于必要性调用的注释我们将以
一种简化的方式展示在程序执行的每个阶段显示内存状态的执行模式我们将介绍调用堆栈机制,该机制用
于在函数调用开始计算时保留上下文信息。这将允许我们引入然后,我们将解释
接下来,我们将介绍目前最流行的在函数程序中模拟突变的技术:单子。我们将从程序员的角度来研究它
们我们将比较同一个程序的不同版本我们将通过介绍单子变换器来研究单子的模块性
最后,我们将讨论用函数式语言编写经济模拟器这里应该注意的是,通常
1.a
函数式编程简介
"函数式"编程指的是"函数":"趋向于特定目标的活动"
1
。它是关于把下面是一个程序(或函数)(funx->
x+1)的示意图,其中自然数作为域和共域:
1.
维基百科目前 https://fr.wiktionary.org/wiki/fonction
第一章Monades的函数式编程简介
12
10
让
v=10
让
f
=
(乐趣x-> x
+
1)
让
a=4
a
=
5
;
0
1
2
...
0
1
2
...
域:N 共域:N
一个函数有一个
"
输入
"
:它需要一个域类型中的参数(
x
)它有一个
"
输出
"
:它在共域的类型中给出一
个返回值(x+1)总函数必须覆盖
函数式编程是基于除了将一个函数,相对独立于它的上下文,并有一个非常简单的接口(一个输入,一个
输出),很好地适合重用。
现在,我们将用一种类似于OCaml函数式语言的语言来开发函数的特性在我们的语言中,我们可以声明一
个表达式并将其与一个名称相关联,
例如,我们将整数与名称
v相
:
程序从上到下运行,每个名称都根据前面的名称进行计算。在下面的示例中,
1
让
a=4
2
让
b= a+3
3
让
c= d+2
4
让
d=5
我们有时会用"变量"这个词来表示一个名称。这并
在函数式语言中,突变是被禁止或限制的。"标准"名称是不可变的,它们的表达式不能更改。但是,也可
以"重载"一个名称,这包括声明一个已经声明的名称在下面的示例中,
让a=2
让x= a*10让
a=3
让y= a*10
一旦给出了变量的这些细节,我们就可以接近这意味着提供输入并启动
第一章Monades的函数式编程简介
13
15
1
让
v=10
2
让
f
=
(乐趣
x
->
x+
v)
3
让
v=20
4
设
r
=
(f
5
)
让
v=10
让
f
=
(乐趣x-> x
+
v)
v
=
20
;
设r
=
( f
5)
设f=(fun x-> x+1)
设 r=( f5)
L’exécution
f
,因此,函数是一种延迟代码的求值的方法
L’exécution LA
的代码
然后加载函数
f
,将名称x与5相关联。一旦此代码的计算结果为6,执行将从调用时的位置因此,名称r
被赋予
我们有时会使用"函数调用函数可以使用参数名称
让
v=10
让f=(乐趣 x-> x+ v)
让 r=( f5)
变量
v在函数f中
被称为
"
自由
"
,因为
它不像变量x那样"绑定"到参数
。函数
f
的自由变量集称为
f
的闭包
。
在前面的示例中, 如果是
10
,则
r
为10。但是在下面的例子中会发生什么呢
是
R
是
15
还是
25
?
如果
r
是
15
,我们就有了
"
静态链接
"
:函数
f
中
v
的定义
永远
是定义
f
时
有效的定义
,第
2
行。
如果
r
为
25
,则存在
"
动态链接
"
:
v
的值是调用函数
f
时
的有效值,第4行
。
我们将为我们的语言选择静态绑定,因为它是当今
请注意,
静态绑定和名称不变性这两个属性的存在因此,使用相同参数对同一函数的两次调用无法区分。换句话
说,一个函数不能"改变它的环境",例如通过改变它的闭包中的变量值我们甚至可以在代码中将函数对其
参数的应用替换为该应用的输出此属性称为"引用透明性"。
更具体地说,如果对于任何程序p,p中e的任何出现都可以被e的求值结果替换,而不影响程序p的意义,
则表达式e因此,可以通过用具有相同值的透明表达式替换透明表达式来对程序进行推理。如果对于任何
透明表达式e,表达式(f e)是透明的,则函数
f
2.
前提是函数的自由变量在替换时是可计算的。否则,如果
第一章函数式编程简介,使用
单子
14
让
f
=
(乐趣
x-> x+1
)
让
g=
(乐趣
x-> x* x
)
让
r=
(
f
(
g10
))
1
让c
=8
2
让
f
x=
3
让c
=
(x
+
c)in
4
字母r
=
(c
+
c)in
5
R
6
设
a=
(f
3
)
7
让c
=12
8
让
b=
(f
4
)
单词
"value"
表示计算表达式。例如,在这种语言中,我们使用
"
头的正常形式
"
,这意味着任何不是应
用程序的表达式请注意,
有几种评估可能性 例如,在下面的示例中
,函数
f
的输入给出了哪个精确表达式
?
如果
相反,如果
在函数输入中按原样给出
在这两种技术中,r的最终值将始终相同:101。在按名称计算时
,执行仅计算所需的内容。 定义一个名
称并不保证对其表达式的求值,也不保证将该名称作为函数调用的输入
。在以下表达式(
print
(
x +
y
))中
print
命 令 在 屏 幕 上 显 示 值 L’évaluation de son argument est donc nécessaire, ce qui implique que les
évaluations de
我们将应用基于
下面是一个示例程序及其执行的示意图,说明了前面介绍的原则为了处理重载,我们将应用以下两种技
术,而不是用数字来区分两个同名的变量(这会使阅读变得困难):
1.
闭包包含变量的名称以及函数定义中有效的值
2.
对于每个函数调用,我们创建一个在调用结束时被删除的环境这会移除函式程式码所执行的变数覆
写。
代码1.a.1
3.
Chris Okasaki在他的书"Purely functional data stringuctures"[Oka99]中写道,
剩余155页未读,继续阅读
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 中国微型数字传声器:技术革新与市场前景
- 智能安防:基于Hi3515的嵌入式云台控制系统设计
- 手机电量低时辐射真增千倍?解析手机使用谣言
- 56F803型DSP驱动的高精度大功率超声波电源控制策略研究
- ARM与GPRS结合的远程监测系统设计
- GPS与RFID技术结合的智能巡检系统设计
- CPLD驱动的低功耗爆炸场温度测试系统设计
- 基于FPGA的智能驱动控制系统:可扩展设计与工业网络协议
- 基于ATmega128和CH374的嵌入式USB接口设计
- 基于AT89C52的温度补偿超声波测距仪:高精度设计与应用
- MSP430F448单片机在交流数字电压表中的应用
- 提升变频器应用效率的12项实用技巧
- STM32F103在数字电镀电源并联均流系统中的应用
- PSpice仿真下的升压开关电源设计:拓扑分析与CCM稳定性提升
- 轻巧高效:MSP430主导的低成本无线传感器网络节点设计
- FPGA在EDA/PLD中实现LVDS接口的应用解析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功