prism

用 C 语言开发一门编程语言 — 基于 Lambda 表达式的函数设计

南楼画角 提交于 2020-04-12 16:52:14
目录 文章目录 目录 前文列表 函数 Lambda 表达式 函数设计 函数的存储 Lambda 函数 父类环境 可变的函数参数 前文列表 《 用 C 语言开发一门编程语言 — 交互式解析器 》 《 用 C 语言开发一门编程语言 — 跨平台的可移植性 》 《 用 C 语言开发一门编程语言 — 语法解析器 》 《 用 C 语言开发一门编程语言 — 抽象语法树 》 《 用 C 语言开发一门编程语言 — 异常处理 》 《 用 C 语言开发一门编程语言 — S-表达式 》 《 用 C 语言开发一门编程语言 — Q-表达式 》 《 用 C 语言开发一门编程语言 — 变量元素设计 》 函数 函数是所有程序设计的关键,其本质源自于一个数学概念,有了函数之后,程序员就可以只考虑它的意义,而不用考虑它的内部结构。在计算机科学的早期,程序员会将复杂的任务分解成一个个小的函数。那时就有人提出了一个设想:只要有足够的时间,程序员们就可以建立一个完整的函数库,以此满足所有计算的要求。当然,现今为止这个设想仍未预见有实现的苗头,主要是因为随着科技的发展计算问题也越发复杂。但很显然的,现在所有受到欢迎的编程语言都有这个趋向,提供更多的库,更好的代码重用率,更好的抽象,让我们的工作更简单。Python 就是一个非常好的例子。 Lambda 表达式 Lambda 表达式(Lambda Expression

LeetCode 887 鸡蛋掉落(dp,记忆化搜索,二分)

无人久伴 提交于 2020-04-12 16:06:20
题目链接: 鸡蛋掉落 你将获得 K 个鸡蛋,并可以使用一栋从 1 到 N 共有 N 层楼的建筑。 每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去。 你知道存在楼层 F ,满足 0 <= F <= N 任何从高于 F 的楼层落下的鸡蛋都会碎,从 F 楼层或比它低的楼层落下的鸡蛋都不会破。 每次 移动 ,你可以取一个鸡蛋(如果你有完整的鸡蛋)并把它从任一楼层 X 扔下(满足 1 <= X <= N )。 你的目标是 确切地 知道 F 的值是多少。 无论 F 的初始值如何,你确定 F 的值的最小移动次数是多少? 示例 1: 输入:K = 1, N = 2 输出:2 解释: 鸡蛋从 1 楼掉落。如果它碎了,我们肯定知道 F = 0 。 否则,鸡蛋从 2 楼掉落。如果它碎了,我们肯定知道 F = 1 。 如果它没碎,那么我们肯定知道 F = 2 。 因此,在最坏的情况下我们需要移动 2 次以确定 F 是多少。 示例 2: 输入:K = 2, N = 6 输出:3 示例 3: 输入:K = 3, N = 14 输出:4 提示: 1 <= K <= 100 1 <= N <= 10000 思路 两种方法: 方法一:记忆化搜索+二分 我们考虑一下 dp[t][n] 代表,现在有 t 层楼, n 个鸡蛋,所能达到的最大楼层。现在定义一个 k (1<=k<=t)

注解开发学习笔记

两盒软妹~` 提交于 2020-04-12 12:06:42
前言 因为之前玩play framework缘故,对springboot不是很了解; 注解我存在很多疑惑: ① 在springboot中自定义的注解如何才能生效使用 ② Lombok 这种注解插件是怎么改变生成的代码的 Lombok插件 今天网上找了一篇手撸Lombok之后,算是明白了疑惑② =-=-=-=-=-=-=-=-=-=-=-=-=-=-以下内容为转载内容-=-=-=-=-=-=-=-=-=-=-=-=-=-= 参考地址: 99%的程序员都在用Lombok,原理竟然这么简单?我也手撸了一个!|建议收藏 我们实现一个简易版的 Lombok 自定义一个 Getter 方法,我们的实现步骤是: ①自定义一个注解标签接口,并实现一个自定义的注解处理器; ②利用 tools.jar 的 javac api 处理 AST (抽象语法树) ③使用自定义的注解处理器编译代码。 1.定义自定义注解和注解处理器 首先创建一个 MyGetter.java 自定义一个注解,代码如下: import java . lang . annotation . ElementType ; import java . lang . annotation . Retention ; import java . lang . annotation . RetentionPolicy ; import java

使用easyPOI时碰到的几个问题(记录一下)

◇◆丶佛笑我妖孽 提交于 2020-04-12 12:03:01
文章目录 前言 环境 问题1(ArrayListValuedHashMap找不到) 问题2(CellType类找不到) 问题3(CellStyle.setAlignment) 前言 前面我们说了如何使用easyPOI,详情请参考 全网最全最简单使用easypoi导入导出Excel的操作手册 ,今天我来记录下在使用easyPOI时碰到的几个问题,本来以为上传下载功能使用EasyPOI之后挺简单的,结果翻车了,一个上传和下载就因为版本的问题搞了老半天。真的是很愁人呀。下面就是我系统的初始环境。 环境 < ! -- springboot -- > < parent > < groupId > org . springframework . boot < / groupId > < artifactId > spring - boot - starter - parent < / artifactId > < version > 2.1 .3 . RELEASE < / version > < / parent > < ! -- springboot -- > < ! -- easypoi -- > < dependency > < groupId > cn . afterturn < / groupId > < artifactId > easypoi - spring - boot -

【GIS入门】- 2.GIS学习途径有哪些

ε祈祈猫儿з 提交于 2020-04-12 10:36:17
1. GIS空间站,中国地理信息门户网站 这个网站算是比较国内早期的地理信息门户网站,里面有GIS方面的相关资料和行业动态,论文资料,讨论ArcGIS、ArcSDE等软件的应用和开发 ,可以用来拓宽视野提升对行业认知。 2. NarutoGIS 这是一个集在线教育、科普、研究,技术交流支持等于一体的信息平台。集成微信登录,支付,解决用户在线学习,查看相关资料,数据下载,系统代码查看等功能。 点赞 收藏 分享 文章举报 Hepburn Yang 发布了287 篇原创文章 · 获赞 260 · 访问量 58万+ 他的留言板 关注 来源: oschina 链接: https://my.oschina.net/u/4370441/blog/3230620

Nginx+keepalived高可用集群简单搭建(主从和双主)

给你一囗甜甜゛ 提交于 2020-04-12 10:27:06
nginx搭建高可用集群 在本文中,将利用keepalived + nginx搭建高可用集群,分别介绍主从模式和双主模式。 环境准备 首先需要准备环境,本文使用两台虚拟机搭建一个nginx高可用集群,虚拟机上分别安装nginx和keepalived,安装步骤如下: 使用如下命令安装相关依赖: yum -y install make zlib zlib devel gcc c++ libtool openssl openssl dev el 安装nginx,去官网下载对应tar包,上传到虚拟机,解压,进行解压后的nginx安装包目录使用如下命令: ./configure make && make install 关闭防火墙或开放对应端口。(不同版本linux命令有所不同,下面是centos7使用firewall命令) firewall-cmd --list-all #查看开放的端口号 firewall-cmd --add-service = 80/tcp --permanent #设置开放的端口号 firewall-cmd --reload #重启防火墙 systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开机启动 安装keepalived,使用如下命令

选择工业PLC远程模块需要注意功能细节

自作多情 提交于 2020-04-12 09:18:37
4G工业PLC远程模块已经广泛应用于电力、工业自动化、环保、金融等工业领域。 自助终端设备需要大数据量网络传输,通过4G模块高速联网,将所有终端业务数据及设备运行状态实时传输到业务中心,降低了业务中心运营成本,管理运营规模化。 1.边缘计算功能 支持远程控制功能,实现数据采集、数据监控、数据过滤、数据安全防护,数据存储,数据上传、远程上下载等功能; 2.多种联网方式 支持以太网、4G、WiFi,手机热点等联网方式,为不同的应用场合提供不同的接入方案。 3.协议兼容广 支持工业现场的多种工业设备协议、国际标准协议,如:Modbus等,使设备轻松接入。 4.故障自愈 支持联网断线自动重拨,故障自愈;提供故障线路链路冗余,多级链路检测机制保障设备在线。 5.安全防护 支持防火墙功能,保证设备网络安全特性; 6.云组态 一站式完成终端设备数据采集、实时控制、分组管理、组态设计等功能。 7.智能维护 对每台机床进行远程维护,实现远程诊断、远程遥控。对现场设备自动更新下载程序,运维人员无需去现场就能及时解决故障问题。 点赞 收藏 分享 文章举报 华杰智控HJ8900 发布了26 篇原创文章 · 获赞 6 · 访问量 1万+ 私信 关注 来源: oschina 链接: https://my.oschina.net/u/4404541/blog/3230533

DHT11温湿度复合传感器

守給你的承諾、 提交于 2020-04-12 07:49:40
DHT11 是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。产品为4针单排引脚封装。连接方便,特殊封装形式可根据用户需求而提供。 模块 供电电压: 3.3~5.5V DC 输 出: 单总线数字信号 测量范围: 湿度 20-90%RH, 温度 0~50℃ 测量精度: 湿度±5%RH, 温度±2℃ 分 辨 率: 湿度 1%RH, 温度 1℃ 长期稳定性: <±1%RH/年 注意事项 1、避免在结露情况下使用 2、长期保存温度 10-40℃,湿度 60%以下 3、使用时电源和地接法要正确,以免损坏传感器 点赞 2 收藏 分享 文章举报 James Bin 发布了161 篇原创文章 · 获赞 356 · 访问量 33万+ 私信 关注 来源: oschina 链接:

leetcode面试题 17.18. 最短超串题解(滑动窗口问题)

£可爱£侵袭症+ 提交于 2020-04-12 07:42:31
解题思路 labuladong算法小抄里面滑动窗口C++解法的java版。 1.把[left,right]称为一个窗口; 2.先右移右指针扩大窗口,直到窗口中的数字满足small数组要求; 3.满足要求时,停止增加right,转而增加left缩小窗口,直到不满足要求 4.重复2,3步直到right走到big尽头 Talk is cheap, show me the code. 代码 class Solution { public int [ ] shortestSeq ( int [ ] big , int [ ] small ) { //左右双指针表示滑动窗口,start和min用来保存最优解 int left = 0 , right = 0 , start = 0 ; int min = Integer . MAX_VALUE ; //window用来记录当前窗口包含的字符和出现的次数 //needs用来记录small当中出现的字符和包含的次数 HashMap < Integer , Integer > window = new HashMap < > ( ) ; HashMap < Integer , Integer > needs = new HashMap < > ( ) ; //记录small中出现的字符和包含的次数 for ( Integer c : small )

学习C++之STL:探讨对set进行insert操作时的返回值、pair对组的学习

久未见 提交于 2020-04-12 07:37:29
set和multiset的区别是前者不允许元素重复,后者允许。这区别具体体现在set插入元素时会检查元素,multiset不会,在insert函数本身,也很好的体现出了这一差异。(通过VS2019选中后右键转到定义查看) set的insert函数返回值是pair对组型。队组的第一个成员是指向欲插入元素的迭代器,第二个成员是一布尔量,表示本次操作是否成功。 multiset的insert函数的返回值是指向所插入元素的迭代器。 对组是C++中成对出现的一种数据类型,利用pair可以使函数一次返回两个值。 接下来介绍pair对组型数据的用法。 创建: pair < type1 , type2 > p ( value1 , value2 ) ; pair < type , type2 > p = make_pair ( value1 , value2 ) ; 读取数据: p . first ; //返回对组的从左数第一个类型的数据 p . second ; //返回对组的从右数第二个类型的数据 赋值: pair是C++的内置数据类型之一,不用添加任何头文件就能使用,故赋值运算符=支持pair型数据。 所以在向set插入元素后可以通过insert的返回值查询元素的迭代器和元素成功插入与否。例如: //这种方式只能访问一次,且只能访问一个成员 ( set . insert ( elem ) )