优雅的函数式编程--Clojure概述
欢迎转载,转载请注明出处,徽沪一郎。
楔子
由于阅读storm源码的原因,头一次接触到Clojure。没有花特别的时间来研究clojure语法,只是在一些特殊的用法时,才查了一下clojure官网的文档,基本上能够很快的理解其意思。
在理解了storm中的基本处理流程之后,花了一段时间好好的看了几本clojure编程的书籍,书籍名称及评价分别如下。
- clojure programming 介绍了clojure语言的基本特点,同时对于clojure的工程实践做了比较详细的介绍
- programming clojure 重点全部在于介绍clojure语言的特点,对于clojure在实际中的应用介绍比较简略,个人以为在对clojure语言本身的介绍方面,这本要优于上面提到的clojure programming一书
- the joy of clojure 该书籍从一个比较高的层面来思考clojure为什么要设计成这样,有点类似于c++中的c++沉思录一类的
语言概述
clojure是庞大的lisp编程语言家族中的一个新成员,所以其有lisp语言的鲜明特征,一切皆函数。
clojure语言的核心主要涉及如下几个部分。
- 函数式编程
- 数据类型
- 条件判断语句,循环控制语句
- 集合 如set,list,vector, map
- sequence 这个是非常特殊的一部分,从传统的c或java转换到clojure编程,常常容易在这卡住
- 函数
- 变量声明
- 集合解构
- 宏 (特色所在)
- 并发编程 (concurrent programming)
- STM
- 面向对象 clojure吸收并借鉴了object-oriented的编程语言的一些优点,
- 函数重载 defmulti
- 接口 defprotocol 解决is-a的问题
练习
clojure的语法非常简洁优雅,花不了半天的时间就能大体知道个大概,但要想彻底的掌握还是需要大量的练习才行。
哪些题目值得花时间,哪些不值一提,这个已经有人想到了,并搞了个很好的网站。http://www.4clojure.com 到该网站注册一个用户名,总共150道题,难度由浅入深,是不可多得的学习资源。
clojure中的语法糖不是特别多,但想一个不落的记处还是有点累,为此完全可以将clojure cheatsheet放置在办公桌最显眼的地方,不多就两张A4张。http://clojure.org/cheatsheet
优雅的函数式编程--Clojure概述的更多相关文章
- paip.函数式编程方法概述以及总结
paip.函数式编程方法概述以及总结 1 函数式编程:函数式风格..很多命令式语言里支持函数式编程风格 1.1 起源 (图灵机,Lisp机器, 神经网络计算机) 1.2 函 ...
- 函数式编程思想概述和冗余的Runnable代码
函数式编程思想概述 在数学中,函数就是有输入量.输出量的一套计算方法 相对而言,面向对象过分强调必须通过对象的形式来做事情,而函数式的思想是尽量忽略复杂的面向对象的复杂语法--是强调做什么而不是以什么 ...
- 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第6节 Lambda表达式_1_函数式编程思想概述
函数式编程和面向对象的区别
- 优化函数式编程:向 PHP 移植 Clojure 函数
许多通用程序设计语言试图兼容大多数编程范式,PHP 就属于其中之一.不论你想要成熟的面向对象的程序设计,还是程序式或函数式编程,PHP 都可以做到.但我们不禁要问,PHP 擅长函数式编程吗?本文系国内 ...
- 《Clojure编程》笔记 第2章 函数式编程
目录 背景简述 第2章 函数式编程 背景简述 本人是一个自学一年Java的小菜鸡,理论上跟大多数新手的水平差不多,但我入职的新公司是要求转Clojure语言的.坊间传闻:通常情况下,最好是有一定Jav ...
- Clojure学习笔记(二)——函数式编程
定义 “函数式编程”是一种编程范式(programming paradigm),即如何编写程序的方法论.主要思想是把运算过程尽量写成一系列嵌套的函数调用. 举例来说,现在有这样一个数学表达式: (1 ...
- js函数式编程——蹦床函数
概述 这是我在学习函数式编程的时候,关于递归,尾递归,相互递归和蹦床函数的一些心得,记下来供以后开发时参考,相信对其他人也有用. 参考资料:JavaScript玩转Clojure大法之 - Tramp ...
- JavaScript 函数式编程读书笔记2
概述 这是我读<javascript函数式编程>的读书笔记,供以后开发时参考,相信对其他人也有用. 说明:虽然本书是基于underscore.js库写的,但是其中的理念和思考方式都讲的很好 ...
- 给 JavaScript 开发者讲讲函数式编程
本文译自:Functional Programming for JavaScript People 和大多数人一样,我在几个月前听到了很多关于函数式编程的东西,不过并没有更深入的了解.于我而言,可能只 ...
随机推荐
- 类似于fopen与fopen64的种种情况
在Linux和unix系统中,我们会遇到¥和¥64的情况.比如stat64,fopen64等 fopen64是linux特有 的,fopen64()函数和fopen()函数相同的,只是底层的文件描述符 ...
- [hihoCoder] 博弈游戏·Nim游戏
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 今天我们要认识一对新朋友,Alice与Bob.Alice与Bob总是在进行各种各样的比试,今天他们在玩一个取石子的游戏.在 ...
- Android之UI控件
本文主要包括以下内容 Spinner的使用 Gallery的使用 Spinner的使用 Spinner的实现过程是 1. 在xml文件中定义Spinner的控件 2. 在activity中获取Spin ...
- hadoop的关键进程
hadoop集群中主要进程有master: NameNode, ResourceManager,slaves: DataNode, NodeManager, RunJar, MRAppMas ...
- Win7中打开chm文件内容无法显示问题
今天下载了一个linux的2.6.22.14中文文档,下载后发现显示异常 www.2cto.com 怀疑是API的问题,连续从几个网站下来了很多版本,发现都存在这个问题,然后就开始自己的身上找原 ...
- SecureCRT乱码
http://jingyan.baidu.com/article/948f59245be128d80ff5f9aa.html
- Jquery的tmpl
jquery 中的tmpl类似于asp.net中的datalist控件. 首选,在页面代码中加入两行,jquery的js文件引用 <script src="http://code.jq ...
- poj 1113:Wall(计算几何,求凸包周长)
Wall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 28462 Accepted: 9498 Description ...
- Android安卓知识点
1 包名是唯一标识apk的记号,相当于公民身份证号. 2 ADB是Android Debug Brigde 的英文缩写,意思是Android程序调试桥,使用SDK自带的工具可以对Android模拟器或 ...
- 电脑上安装的android虚拟机,能进行基站定位和GPS定位吗?要怎么做才能定位?(转)
基站定位是通过电信运营商的服务来实现的,至少你得有SIM卡吧,一般电脑是不会有电话功能的吧,所以,通过基站定位不可能. GPS是需要有相应的硬件来支持的,类似于手机需要有GPS模块才可以,电脑一般没有 ...