Lua程序设计(编程实操9-17)
Chapter9 闭包在Lua语言中,函数是严格遵循词法定界(lexicalscoping)的第一类值(first-classvalue)。
“第一类值”意味着Lua语言中的函数与其他常见类型的值(例如数值和字符串)具有同等权限:一个程序可以将某个函数保存到变量中(全局变量和局部变量均可)或表中,也可以将某个函数作为参数传递给其他函数,还可以将某个函数作为其他函数的返回值返回。
“词法定界”意味着Lua语言中的函数可以访问包含其自身的外部函数中的变量(也意味着Lua语言完全支持Lambda演算)。【 此处原文大致为”Lexical scoping means that functions can access variables of their enclosing functions”,实际上是指Lua语言中的一个函数A可以嵌套在另一个函数B中,内部的函数A可以访问外部函数B中声明的 变量。 定界是计算机科学中的专有名词,指变量与变量所对应实体之间绑定关系的有效范围,在部分情况下也常与可见性(visibility)混用。 词法定界也被称为静态定界(static ...
Lua程序设计(Lua语言入门1-8)
Chapter1 Lua语言入门1.3 全局变量在Lua语言中,全局变量(Global Variable)无须声明即可使用,使用未经初始化的全局变量也不会导致错误。当使用未经初始化的全局变量时,得到的结果是nil:
123> b --> nil> b = 10> b --> 10
当把nil赋值给全局变量时,Lua会回收该全局变量(就像该全局变量从来没有出现过一样),例如:
12345678910111213141516171819> b = nil > b --> nil``` Lua语言不区分未初始化变量和被赋值为nil的变量。在上述赋值语句执行后,Lua语言会最终回收该变量占用的内存。## 1.4 类型和值Lua语言是一种动态类型语言(Dynamically-typed language),在这种语言中没有类型定义(type definition),每个值都带有其自身的类型信息。Lua语言中有8种基本类型:nil(空)、boolean(布尔)、number(数值)、string(字符串)、userdat ...
《大话数据结构》(串)
Chapter 5 串串:串(string)是由零个或多个字符组成的有限序列,又名叫字符串。
串的定义串(string)是由零个或多个字符组成的有限序列,又名叫字符串。一般记为s=”a1a2……an”(n≥0),其中,s是串的名称,用双引号(有些书中也用单引号)括起来的字符序列是串的值,注意引号不属于串的内容。ai(1≤i≤n)可以是字母、数字或其他字符,i就是该字符在串中的位置。串中的字符数目n称为串的长度,定义中谈到“有限”是指长度n是一个有限的数值。零个字符的串称为空串(nullstring),它的长度为零,可以直接用两双引号“”””表示,也可以用希腊字母“Φ”来表示。所谓的序列,说明串的相邻字符之间具有前驱和后继的关系。
还有一些概念需要解释。
空格串,是只包含空格的串。注意它与空串的区别,空格串是有内容有长度的,而且可以不止一个空格。
子串与主串,串中任意个数的连续字符组成的子序列称为该串的子串,相应地,包含子串的串称为主串。子串在主串中的位置就是子串的第一个字符在主串中的序号。
串的比较串的比较是通过组成串的字符之间的编码来进行的,而字符的编码指的是字符在对应字符集中的序号 ...
《大话数据结构》(树)
Chapter 6 树树: 树(Tree)是n(n≥0)个结点的有限集。 n=0时称为空树。 在任意一棵非空树中: (1)有且仅有一个特定的称为根(Root)的结点; (2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、……、Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。
树的定义之前我们一直在谈的是一对一的线性结构,可现实中,还有很多一对多的情况需要处理,所以我们需要研究这种一对多的数据结构——“树”,考虑它的各种特性,来解决我们在编程中碰到的相关问题。
对于树的定义还需要强调两点: 1.n>0时根结点是唯一的,不可能存在多个根结点,数据结构中的树是只能有一个根结点。 2.m>0时,子树的个数没有限制,但它们一定是互不相交的。
结点分类树的结点包含一个数据元素及若干指向其子树的分支。结点拥有的子树数称为结点的度(De-gree)。度为0的结点称为叶结点(Leaf)或终端结点;度不为0的结点称为非终端结点或分支结点。除根结点之外,分支结点也称为内部结点。树的度是树内各结点的度的最大值。如图所示,因 ...
《大话数据结构》(查找)
查找查找(Searching)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。
查找概述所有这些需要被查的数据所在的集合,我们给它一个统称叫查找表。查找表(Search Table)是由同一类型的数据元素(或记录)构成的集合。
关键字(Key)是数据元素中某个数据项的值,又称为键值,用它可以标识一个数据元素。也可以标识一个记录的某个数据项(字段),我们称为关键码。
若此关键字可以唯一地标识一个记录,则称此关键字为主关键字(Primary Key)。注意这也就意味着,对不同的记录,其主关键字均不相同。主关键字所在的数据项称为主关键码。
那么对于那些可以识别多个数据元素(或记录)的关键字,我们称为次关键字(SecondaryKey),如图8-2-1中⑤所示。次关键字也可以理解为是不以唯一标识一个数据元素(或记录)的关键字,它对应的数据项就是次关键码。
查找(Searching)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。若表中存在这样的一个记录,则称查找是成功的,此时查找的结果给出整个记录的信息,或指示该记录在查找表中的位 ...
《大话数据结构》(图)
Chapter 7 图图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。
图定义图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。
对于图的定义,我们需要明确几个注意的地方。 线性表中我们把数据元素叫元素,树中将数据元素叫结点,在图中数据元素,我们则称之为顶点(Vertex)。 线性表中可以没有数据元素,称为空表。树中可以没有结点,叫做空树。在图结构中,不允许没有顶点。在定义中,若V是顶点的集合,则强调了顶点集合V有穷非空。 线性表中,相邻的数据元素之间具有线性关系,树结构中,相邻两层的结点具有层次关系,而图中,任意两个顶点之间都可能有关系,顶点之间的逻辑关系用边来表示,边集可以是空的。
各种图定义无向边若顶点vi到vj之间的边没有方向,则称这条边为无向边(Edge),用无序偶对(vi,vj)来表示。如果图中任意两个顶点之间的边都是无向边,则称该图为无向图。上图就是一个无 ...
《大话数据结构》(排序)
排序假设含有n个记录的序列为{r1,r2,……,rn},其相应的关键字分别为{k1,k2,……,kn},需确定1,2,……,n的一种排列p1,p2,……,pn,使其相应的关键字满足kp1≤kp2≤……≤kpn(非递减或非递增)关系,即使得序列成为一个按关键字有序的序列{rp1,rp2,……,rpn},这样的操作就称为排序。
排序的基本概念与分类假设含有n个记录的序列为{r1,r2,……,rn},其相应的关键字分别为{k1,k2,……,kn},需确定1,2,……,n的一种排列p1,p2,……,pn,使其相应的关键字满足kp1≤kp2≤……≤kpn(非递减或非递增)关系,即使得序列成为一个按关键字有序的序列{rp1,rp2,……,rpn},这样的操作就称为排序。
注意我们在排序问题中,通常将数据元素称为记录。显然我们输入的是一个记录集合,输出的也是一个记录集合,所以说,可以将排序看成是线性表的一种操作。
排序的依据是关键字之间的大小关系,那么,对同一个记录集合,针对不同的关键字进行排序,可以得到不同序列。
这里关键字ki可以是记录r的主关键字,也可以是次关键字,甚至是若干数据项的组合。
排 ...
C语言快速入门
C 基本语法关键字下表列出了 C 中的保留字。这些保留字不能作为常量名、变量名或其他标识符名称。
关键字
说明
auto
声明自动变量
break
跳出当前循环
case
开关语句分支
char
声明字符型变量或函数返回值类型
const
定义常量,如果一个变量被 const 修饰,那么它的值就不能再被改变
continue
结束当前循环,开始下一轮循环
default
开关语句中的”其它”分支
do
循环语句的循环体
double
声明双精度浮点型变量或函数返回值类型
else
条件语句否定分支(与 if 连用)
enum
声明枚举类型
extern
声明变量或函数是在其它文件或本文件的其他位置定义
float
声明浮点型变量或函数返回值类型
for
一种循环语句
goto
无条件跳转语句
if
条件语句
int
声明整型变量或函数返回值类型
long
声明长整型变量或函数返回值类型
register
声明寄存器变量
return
子程序返回语句(可以带参数,也可不带参数)
short
声明短 ...
LeetCode日记
2022/04/27 LeetCode.26 简单1234567891011121314151617181920/// <summary> /// 2022/04/27 LeetCode.26 简单 /// 执行用时:62.38% 内存消耗:59.40% /// </summary> public static int RemoveDuplicates(int[] nums) { int indexP = 0; int num = nums[0]; for (int i = 1; i < nums.Length; i++) { if (nums[i] != num) { num = nums[i]; nums[++indexP] = num; } ...
《两周自制脚本语言》
Chapter 4BNF中使用的元符号
{ pat } 模式pat至少重复0次
[ pat ] 与重复出现0次或1次的模式pat匹配
pat1 | pat2 与pat1或pat2匹配
( ) 将括号内视为一个完整的模式
BNF表达规则factor : NUMBER | “(” expression “)”term : factor { (“*” | “/“) factor }expression : term { (“+” | “-“) term }
:左侧所写的内容能够用于表示与在:右侧所写的模式相匹配的单词序列。
factor : NUMBER | “(” expression “)”factor(因子)意指与右侧模式匹配的单词序列。:左侧出现的诸如factor这样的符号称为非终结符或元变量。
:右侧的模式中也包含了若干个终结符或非终结符。
与非终结符相对的是终结符,他们是一些事先规定好的符号,表示各种单词。NUMBER这种由大写字母组成的名称,以及由双引号”括起的诸如”(“的符号就是终结符。NUM ...