【PL理论】(19) 函数式语言:更复杂的 let-in 示例 | 作用域 | 静态作用域 vs. 动态作用域

news2024/11/14 0:52:47

  • 💭 写在前面:本章我们将继续讲解函数式语言,介绍比上一章更复杂的 let-in 示例,进行分析。并讲解作用域,通过例子对比静态作用域和动态作用域的区别。

目录

 0x00 复杂的 let-in 示例

0x01 作用域

0x02 静态作用域 vs. 动态作用域


 0x00 复杂的 let-in 示例

分析每行环境如何变化:

  • 第 2~7 行中的整个表达式在 {𝑥 ↦ 10} 下进行评估
  • 第 5 行中的 x + z 表达式在 {𝑥 ↦ 1, 𝑧 ↦ 2} 下进行评估
  • 第 7 行中的 x + y 表达式在 {𝑥 ↦ 10, 𝑦 ↦ 3} 下进行评估

你还必须能够绘制推导树来证明这个程序最终被评估为 13(即,𝝓 ⊢ 𝒆 ⇓ 𝟏𝟑)

0x01 作用域

在前面的示例中,我们可以考虑每个名称有效的区域(这样的区域称为作用域)

  • 第一个 x(第 1 行的)在 2 - 7 行中全都有效
  • 第二个 x(第 3 行的)只在 4 - 5 行中有效

此外,名称 z 只在第 5 行有效,因此,如果我们在第 7 行写入 z + y,将会出现错误。

0x02 静态作用域 vs. 动态作用域

决定作用域也可以看作是解决名称冲突的问题。

在第 3 行的 x + n 中,n 指的是哪一个?第一个 n (第 1 行的) ?还是第二个 n (第 5 行) ?

直觉上,自然会认为指的是第一个 n

这样的设计选择被称为静态作用域(大多数现代语言采用此方式)。

在具有动态作用域的语言中,n 指的是第二个 n,也就是说,它在运行时引用的是最近定义的 n

静态和动态作用域的概念也存在于命令式编程语言中。

考虑以下 C 代码(当然了,C 就是使用静态作用域的)

如果 C 使用动态作用域,理解一个程序会变得困难,取决于选择的分支,n 可能是 20 或 30:


📌 [ 笔者 ]   王亦优
📃 [ 更新 ]   2024.6.10
❌ [ 勘误 ]   /* 暂无 */
📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,
              本人也很想知道这些错误,恳望读者批评指正!

📜 参考资料 

Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1813860.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EI/CPCI/Scopus会议论文是啥?

EI/CPCI/Scopus会议论文是啥? EI/CPCI/Scopus是学术圈常见的字母缩写了,它们并非某一种期刊或是某一种杂志,而是一种便捷的论文检索工具。它们之间的区别在于,各自涵盖的领域的不同。▌EI (The Engineering Index&…

STM32硬件接口I2C应用(基于MP6050)

目录 概述 1 STM32Cube控制配置I2C 1.1 I2C参数配置 1.2 使用STM32Cube产生工程 2 HAL库函数介绍 2.1 初始化函数 2.2 写数据函数 2.3 读数据函数 3 认识MP6050 3.1 MP6050功能介绍 3.2 加速计测量寄存器 ​编辑3.3 温度计量寄存器 3.4 陀螺仪测量寄存器 4 MP60…

openlayers 绘图功能,绘制多边形,draw组件的使用,一个简单的需求引发的思考(二)

上一篇是使用openlayers原生实现的,这一节使用vue3-openlayers实现(有轮子真好) 1 需求 使用openlayers绘图功能绘制多边形 2 分析 主要是openlayers中draw功能的使用 3 实现 为了方便,就不加载底图了,直接使用绘制功能 2.1 简单实现 …

ttkbootstrap的icon图标自定义

前言 在使用ttkbootstrap库时,发现icon参数使用报错,错误代码 root ttk.Window(themename"superhero",size(1400, 700),resizable(True, True),iconphoto"1.png" )结果报错:iconphoto path is bad; using default ima…

AC/DC电源模块的原理、特点以及其在实际应用中的重要性

BOSHIDA AC/DC电源模块的原理、特点以及其在实际应用中的重要性 AC/DC电源模块是一种用于将交流电转换为直流电的设备,广泛应用于各种电子设备中。这种电源模块可以有效地将电力从电网中提取出来,并将其转换为稳定的直流电源,供给各种不同功…

【短剧看剧系统之投流版】短剧看剧系统功能更新,前端uniapp搭建开发

目录 一、常规款短剧系统和投流版的区别? 二、后端体系 1.管理端: 2.代理投流端 三、功能区别 总结: 前言: 短剧看剧系统目前在抖音端是比较热门的,最重要的功能就是可以接入第三方cps,包含类目报白…

万众瞩目的苹果AI来了,但我们用不了

关注卢松松,会经常给你分享一些我的经验和观点。 从今天开始,最了解你的不是你老婆,不是你自己,而是苹果AI。 万众瞩目的苹果WWDC24开发者大会在大半夜举办了,其中一项重要的更新是:苹果宣布要把ChatGPT集…

MES系统定制 | 生产调度车间排班计划/MES排程排产

MES系统是一种集成化的生产信息化管理系统,通过实时收集和分析车间生产数据,帮助企业实现生产过程的自动化控制和监测。它可以跟踪生产计划、设备状态、物料流动等关键指标,并提供实时报表和决策支持。在这个系统中,车间班次排班是…

零基础直接上手java跨平台桌面程序,使用javafx(五)TableView显示excel表

我们在窗口的中间加上TableVie: 在hello-view.fxml的文本中,要增加一些代码。在TableView定义中加上fx:id"TableView1",这样java代码才方便访问,在java代码中要加上FXML private TableView TableView1;表示定义TableVie…

如何禁止使用U盘|禁止使用U盘的四个方法

你知道U盘滥用对企业的危害,总接下来有这三点: 数据泄露:U盘可以方便地存储和传输大量数据,但如果U盘丢失或被盗,其中的数据可能会被他人获取,从而导致数据泄露。病毒传播:U盘是病毒传播的常见途径之一。如…

基于若依的ruoyi-nbcio-plus里抄送人多页选择人员的bug修复

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: h…

点云技术在AI绘画中的革新性应用

引言: 随着人工智能的不断演进,艺术与科技的交融催生了AI绘画这一全新的创作方式。AI绘画不仅为艺术家提供了前所未有的工具,也拓展了艺术表达的边界。在这一进程中,点云技术作为一种重要的三维数据处理手段,其在AI绘画…

深入解析:常用的IP地址类型及其应用

随着互联网的日益发展,IP地址已经成为了我们日常生活中不可或缺的一部分。无论是浏览网页、发送邮件,还是进行在线视频通话,都离不开IP地址的参与。然而,对于许多非专业人士来说,IP地址的分类及其应用可能还是一个相对…

1502 - JUC高并发

慢慢挣,今天比昨天更有钱,明天比今天有钱,后天比明天有钱。 0.思维导图 6.多线程锁 synchronized实现同步的基础:Java中的每一个对象都可以作为锁。 具体表现为以下3中形式 对于普通同步方法,锁是当前实例对象。对于…

Python 基础001 pythonpycharm安装

1 安装python 尽量在官网安装 根据电脑情况下载,下载完需要重启电脑 python安装路径自定义 添加环境变量(add path)需要勾选,若无勾选,手动更新环境变量 确认python是否安装成功: 方法一:有安装成功&am…

零基础直接上手java跨平台桌面程序,使用javafx(六)查询sqlite数据显示到TableView中

我们使用jdbc查询sqlite的一个表显示到TableView中 在hello-view的onMouseClicked里面填上“openclick2”,然后在HelloController写上openclick2的相关代码FXML protected void openclick2() { }。我们要先配置好sqlite的jdbc驱动(略)。openc…

代码随想录算法训练营第二十九天【回溯】| 491,46,47

491. Non-decreasing Subsequences 排列用startindex 树枝不去重,树层去重 子集问题结果在结点(个数>2) class Solution(object):def findSubsequences(self, nums):""":type nums: List[int]:rtype: List[List[int]]&…

如何在网上下载到最新或者历史QGIS各个版本的C++源码

背景: 博主写下这篇文章的时候已经是PyQGIS下二开了两年,开发一些功能必须得去阅读QGIS的C版本源码,还得考虑到QGIS的长期稳定版和最新版的源码区别。 所以如何去下载到QGIS的源码,就成了当务之急。 QGIS3.36.3的C源码长得像这…

KOL营销在时尚、美妆与健康行业的特点解析与应用策略

在当今数字化时代,KOL营销已经成为推动品牌影响力和销售增长的重要策略之一。尤其在时尚、美妆和健康等行业,KOL的影响力和效果尤为显著。本文Nox聚星将和大家详细探讨KOL营销在这些行业中的应用情况、特点以及最佳实践。 一、时尚行业KOL营销 时尚行业…

finalshell创建和使用

1、下载安装 下载地址Finalshell SSH工具,业界最强大的SSH客户机 2、创建连接 点击文件夹新建连接