编程语言
cwt8805
这个作者很懒,什么都没留下…
展开
-
Python中实现块作用域
Python如何实现块级作用域翻译 2023-03-12 20:51:52 · 277 阅读 · 0 评论 -
chadstr,小巧的C语言字符串库
https://github.com/skullchap/chadstr/blob/master/chadstr.h用法示例:int table = 13;int id = 37;// 字符串插值str test1 = str("SELECT * FROM ", table, " where person_id ", id);// 复制test1str test2 = str(test1);// 字符串拼接str test3 = str(test2, test1);puts(st翻译 2021-05-19 15:41:16 · 207 阅读 · 0 评论 -
正则表达式概述及其在Python中的应用
正则表达式描述了一种字符串的模式,主要由下列构件组成。字符和字符集比如有一个从a到z的字符串,如果要写一个正则表达式来描述,最笨的方法当然是abcdefghijklmnopqrstuvwxyz。使用字符集可以写成[a-z],0到9的自然数可以写成[0-9]。还有更简便的方式,那就是通过一些\转义的特殊字符用来表达字符集,比如\d用来表达数字[0-9],非数字是\D或者[^0-9](字符集前的^...原创 2020-02-28 13:48:21 · 311 阅读 · 0 评论 -
正则表达式的真正威力(3)
不受限文法乔姆斯基谱系中的再上一层是不受限文法。这个语言集合可以组成所有的递归可枚举语言集合。这个文法是不受限的,所以没啥可说的。不受限文法的产生式规则有这样的形式α -> β,这里面α和β是任意的符号串。基本上不受限文法就是去掉了非收缩文法中的限制。所以A B C -> H Q是合法的,即便在非收缩文法看来不合法。那么不受限文法到底有多强大呢?他们是图灵完备的。甚至有一个基于...翻译 2020-02-28 11:03:11 · 379 阅读 · 0 评论 -
正则表达式的真正威力(2)
上下文有关文法接下来再看乔姆斯基谱系上一层:上下文有关语言。上下文有关语言中的产生式都具有以下形式:α A β → α γ β这种混合字符初看很复杂,其实很简单。核心依然具有形式A → γ,...翻译 2020-02-28 11:00:48 · 221 阅读 · 0 评论 -
Programming Clojure笔记之四——函数式编程
函数式编程的一些概念pure functionspure function就是没有side effects的函数。除了参数不依赖其他,除了返回值不影响其他。Persistent Data Structures数据结构不可变是Clojure实现函数式编程和并发的关键。 然而数据不可变意味着更改时需要复制,为了保证性能,Clojure会共享数据Laziness and Recursion在Clojur原创 2016-05-05 16:40:49 · 886 阅读 · 0 评论 -
Java 8 官方教程翻译——方法引用(method reference)
你可能会使用lambda表达式创建匿名方法。然而有时lambda表达式仅仅调用了一个已存在的方法。这种情况下,直接使用该方法名会显得更加简洁。方法引用正是用在此处;他们是有名方法的紧凑而又易读的lambda表达式。回顾在Lambda Expressions一节中讨论过的Person类:public class Person { public enum Sex翻译 2014-12-26 14:43:16 · 2023 阅读 · 0 评论 -
Java 8 官方教程翻译——Lambda表达式
使用匿名类的一个问题是,如果匿名类的实现过于简单,例如实现的接口只包含一个方法,那么匿名类的语法就显得笨拙和不清晰。在这种情况下,你要做的事情通常是向某方法传递一些功能代码块,例如在响应按钮被点击时应该执行什么操作。Lambda表达式能简化这项工作,它将功能代码块作为参数,或者说将代码当数据。在前一节中讲述匿名类时,我们向你展示了如何在不指定类名的情况下实现一个类。即使这样要比翻译 2014-12-26 12:16:24 · 1865 阅读 · 0 评论 -
Java 8 官方教程翻译——默认方法(default method)
在接口(interface)一节中提到了一个示例,其中涉及了一些发布工业标准接口的“计算机控制汽车“生产商,其发布的接口中描述了哪些方法(method)可以用来操作这些汽车。假如这些生产商需要给他们的汽车添加新的功能,例如飞行,那么就需要指定一些新的操作方法来使得第三方(例如一些电子导航装置的生产商)软件适配到这些新汽车上。那么在何处声明这些新的”飞行相关“方法呢?如果将之添加到原有的接口中,那么翻译 2014-12-25 15:13:59 · 1348 阅读 · 0 评论 -
Programming Clojure笔记之三——使用序列
一切皆SequenceA **seq** is a logical list.Collections that can be viewed as seqs are called **seq-able**.;获取序列的第一个元素,序列为空或nil则返回nil(first aseq);获取序列的第一个以外的所有元素,序列为空或nil则返回一个空序列(rest aseq);向序列起始处添加元素原创 2016-05-04 18:13:24 · 1246 阅读 · 0 评论 -
Programming Clojure笔记之二——探索Clojure
Clojure具有同像性(homoiconic),即代码与其数据的结构一致。Clojure代码主要由以下形式(Forms)构成。这些形式可以理解为其他程序设计语言中的数据类型。 Form Example(s) Boolean true, false Character \a Keyword :tag, :doc List (1 2 3), (println “h原创 2016-05-03 13:54:53 · 953 阅读 · 0 评论 -
Programming Clojure笔记之九——snake游戏源码解析
(ns reader.snake (:import (java.awt Color Dimension) (javax.swing JPanel JFrame Timer JOptionPane) (java.awt.event ActionListener KeyListener)) (:use examples.import-static))原创 2016-05-13 17:34:30 · 650 阅读 · 0 评论 -
Programming Clojure笔记之一——入门
Clojure是一个基于JVM的动态语言,支持函数式编程。https://clojure.org/下载最新版本,获得一个jar文件如clojure-1.8.jar。直接运行java -jar clojure-1.8.jar开启REPL。如果要运行clojure程序文件,如hello.clj,直接运行java -jar clojure-1.8.jar hello.clj。或者在repl中加载,如原创 2016-05-03 13:43:33 · 582 阅读 · 0 评论 -
Programming Clojure笔记之八——多重方法
Living Without Multimethods原创 2016-05-12 17:56:05 · 544 阅读 · 0 评论 -
Programming Clojure笔记之七——宏
大部分的编程技术都是在语言内部构建特性,然而使用宏(macro)可以给语言添加特性。何时使用宏两条准则和一个例外 1. 不要编写宏。能用函数解决的尽量用函数。 2. 如果宏是封装一个模式的唯一方式,那么请编写宏。例外:相比于函数,如果宏能使得调用更方便,也可以使用宏。使用宏编写一个控制流;Clojure中的if是一个特殊形式(special form)(if (= 1 1) (println原创 2016-05-12 14:47:11 · 695 阅读 · 0 评论 -
Programming Clojure笔记之六——协议和数据类型
抽象是代码重用的基础。Clojure语言本身对序列,容器和可调用性进行了抽象。在Java中,这通常是通过接口和类来实现的。在Clojure中一般使用protocol来完成这些任务。 面向抽象编程Clojure内置的spit和slurp函数建构在两个抽象的基础上,即写和读。可以将之使用在很多的源和目标类型上。包括文件、URL和socket,并且还可以扩展到其他已经存在或者新创建的类型上。gulp和ex原创 2016-05-11 13:59:35 · 1279 阅读 · 0 评论 -
Gradle基础——Groovy语言
原文见深入理解Android基本概念println "hello groovy"//定义变量,不必显示指定类型def va1 = 1def var2 = "I am a person"def int val3 = 3//定义函数,关键字return不是必须的String testFunction(arg1, arg2) { "xxxx"}println testFunction(转载 2016-07-04 15:18:00 · 653 阅读 · 0 评论 -
Windows批处理编程
由于经常会碰到批处理文件,因此尝试去学习了下批处理编程。::关闭回显@echo off::setlocal保证变量是局部而不会覆盖全局setlocal enableextensions::该批处理文件名,不包括后缀SET me=%~n0::所在目录的绝对路径SET parent=%~dp0::去掉参数(参数包括批处理文件名,为第0个参数)的引号set myvar=%~1::给参数去引号并加原创 2016-06-07 10:41:40 · 734 阅读 · 0 评论 -
正则表达式的真正威力(1)
匹配上下文无关语言举个上下文无关语言的例子,{a^n b^n, n>0},意思就是“一连串a接着相同数量的b”。相应的正则表达式(PCRE)是:/^(a(?1)?b)$/(?1)引用第一个匹配的子模式(由最外面的小括号包围),也就是(a(?1)?b)。你可以用子模式替换(?1),所以这形成了递归的依赖:/^(a(?1)?b)$//^(a(a(?1)?b)?b)$//^(a(a(...翻译 2018-11-02 17:52:09 · 348 阅读 · 0 评论 -
正则表达式的真正威力(0)
原文我在浏览StackOverflow上关于PHP的问题时经常看到有人提问如何使用正则表达式解析HTML。对于该问题的回答通常是这样的:你不能使用正则表达式解析HTML,因为HTML不是正则的。使用XML解析器吧。这种回答——在该问题的语境下——是有误导性的甚至是完全错误的。接下来我会展示现代正则表达式是多么强大。“正则”到底是什么意思在形式语言理论中,说一个东西是“正则(regul...翻译 2018-10-31 12:18:09 · 377 阅读 · 0 评论 -
Lisp神化之路
程序员在谈论不同编程语言的相对优劣时,其口吻就像是在说别在工具腰带上的不同工具——这个适合系统编程,另一个更适合用于胶合其他程序来完成一些临时任务。这是理所当然的,编程语言各有所长,在脱离具体应用场景的情况下声称一个语言优于其他只会引起无益和恶意的争吵。然而有一个语言会引发普遍的尊崇:Lisp。要是有人胆敢声称某些语言优于其他语言,键盘侠们定然会开始攻击,如果说的是Lisp那就不同了。Lisp超...翻译 2018-10-23 18:01:31 · 30542 阅读 · 2 评论 -
如何写一个简单的解释器-0
在接下来的几篇文章中,我们一起用Java写一个简单的编程语言(我称之为Lan)解释器。该语言不会有实际用处,仅仅作为演示Pratt解析算法。目标读者是对编程语言的解析感兴趣的初学者,当然我也是。先看看Lan的一些代码:变量类型(数字,布尔值,字符串,函数,null)n = 123 + 1 - 23 * 21 / 3b = true s = "hello lan"hello = fun...原创 2018-09-07 15:25:11 · 1359 阅读 · 0 评论 -
如何写一个简单的解释器-1
Lan的源代码由一些基本元素构成,我们称之为Token,在词法分析阶段我们需要将输入的字符流转化成Token流(简单说就是Token列表)。下面是Token的类型定义,为了节省资源采用整数表示而不用枚举类型。public class TokenType { public static final int PLUS = 0;//("+") public stat...原创 2018-09-07 22:47:46 · 1022 阅读 · 0 评论 -
Parse 简介
导言提到Rebol语言的优秀特性那就不得不说它的解析引擎,简称Parse。这项来自Carl Sassenrath的伟大设计,在过去的15年里,使得Rebol用户免受正则表达式(以不可维护著称)的折磨。现如今,Parse的增强版本在Red语言中重装上阵。简而言之,Parse是一个使用语法规则来解析输入序列的内部DSL(在Rebol生态圈称为“方言”)。Parse方言是TDPL家族的突出一员。翻译 2018-01-22 13:33:48 · 14251 阅读 · 0 评论 -
Java核心技术之代理
什么是代理(proxy)?使用代理服务器翻过墙的都知道那大概是怎么一回事。比如,我想访问google,结果GFW不允许。假如存在于某地的一台主机可以访问google,并且可以提供访问google的服务,这时我们向这台主机发出访问google的请求,这台主机然后将我们的请求转发给google,并且将google的响应内容返回给我们,那么这个主机就是一个代理了。Java中的代理是这样定义的,利用代理可以原创 2016-06-24 13:34:09 · 779 阅读 · 0 评论 -
Java核心技术之泛型
泛型类(generic class)是带有一个或者多个类型形参(type parameter)的类。泛型方法是带有类型形参的方法。可以要求类型形参必须是一个或多个类型的子类型。泛型类不是协变的(invariant):当S是T的子类型时,G<S>和G<T>没有任何关系。通过使用通配类型形参(wildcards)G<? extends T>或者G<? super T>,使得一个方法可以接受使用T原创 2017-11-22 14:17:33 · 367 阅读 · 0 评论 -
JavaScript原型链
Object-Prototype凭空诞生,为所有对象的根原型。在此基础上派生出了Function-Prototype,为所有函数对象的原型。Function函数对象以Function-Prototype为原型,以自身为构造器创建了自己。可以认为这是元构造器。此后用户便拥有了构造函数对象的能力,例如上图中的Foo。function Foo() {}//或者var Foo = function()原创 2017-06-17 17:03:56 · 628 阅读 · 0 评论 -
Java泛型小结
泛型类(generic class)是带有一个或者多个类型形参(type parameter)的类。泛型方法是带有类型形参的方法。可以要求类型形参必须是一个或多个类型的子类型。泛型类不是协变的(invariant):当S是T的子类型时,G<S>和G<T>没有任何关系。通过使用通配类型形参(wildcards)G<? extends T>或者G<? super T>,使得一个方法可以接受使用T原创 2017-01-10 14:37:40 · 569 阅读 · 0 评论 -
Java核心技术之注解处理
注解处理运行时处理定义一个注解ToString(注解本质上就是一种接口)@Target({ElementType.FIELD, ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)public @interface ToString { boolean includeName() default true;}任意需要格式化打印的类对原创 2016-08-29 10:43:41 · 676 阅读 · 0 评论 -
Java核心技术之脚本和编译
脚本//创建一个脚本引擎管理器ScriptEngineManager manager = new ScriptEngineManager();//遍历引擎管理器所支持的所有脚本引擎for (ScriptEngineFactory factory : manager.getEngineFactories()) { System.out.println(factory.getEngineNa原创 2016-08-29 10:14:28 · 560 阅读 · 0 评论 -
Programming Clojure笔记之五——状态
在Clojure中,几乎任何事物都是一个值(value)。 状态(State)就是一个identity在某个时间点的值。 对于identity,在Clojure中提供了四种引用类型。Refs,对共享状态以coordinated,synchronous方式进行更改Atoms, 对共享状态以uncoordinated,synchronous方式进行更改Agents,对共享状态以asynchro原创 2016-05-06 17:46:51 · 875 阅读 · 0 评论 -
JavaScript简明教程
这不是一个参考手册、编程指南或者全面讲解。本文假定你了解其他编程语言,然后作为一篇快速了解JavaScript的指南而存在(尽情使用ctrl+f)。JavaScript跟Java没有关系,它是一个有着类C语法的动态语言。启用JavaScript在HTML文件中直接嵌入JavaScript脚本:<script> x = 3;</script>在HTML文件中引用外部JavaScript文件:翻译 2016-01-11 18:21:50 · 680 阅读 · 0 评论