学习使用clojure(1)

clojure 是一门函数式语言。

函数式语言并非当今开发语言的主流。

主流多是“命令式”语言 (imperative language)

其中以面向对象范式居多。

发展趋势上看,并行,分布式,多cpu越来越普及。

主流语言在对待这些变化上事倍功半,有点力不从心。

所以,近些年,函数式语言有卷土重来的意思。

函数式或崇尚函数式的语言很多,最古老的Lisp系列,

学究式的 Haskell, ML家族的Ocaml

妄图取代java的 scala

当然还有至简而务实的 clojure

clojure很简,整个语言就是一个 clojure-xxxx.jar 文件,发展了近10年,仍只有大约3M。

函数式的共同特性是:

  1. 崇尚“纯函数”,就是没有副作用,对特定的输入,永远是相同的输出。
  2. “函数”是一等公民。可以同int string 类型的变量一样作为参数传递,作为返回值,

    也可以说,支持高阶函数特性。

  3. 使用不变的“数据”,而非“变量”

    这个好处很多,可以很容易地处理并发,无“锁”的困扰

  4. 关注点在“变换”以及“变换的组合”,这是关注“动词”,而非面向对象王国里的“名词”--即对象。有称之为“动词的复仇”

clojure 很务实,没有清高地畅游于数学世界,而是选择了JVM为宿主。

可以像调用自身函数一样简单地操控java类库中的类、对象、方法。

java能做得很好的事,clojure就不再重新发明,至多是包装一下,为了更好组合。

clojure强调“不变性”,但并不拒绝偶尔使用“变量”

clojure强调“纯函数”,但不拒绝必要的“副作用”(比如调试的打印)

clojure崇尚“惰性求值”,但并不强迫你必须如此。

最后,clojure是一种Lisp的方言,在JVM上的Lisp方言。

它保持了Lisp的强大,并且更简洁

即便永远都不用它,其设计理念,内中哲学绝对值得品味!

时间: 2024-10-29 19:10:21

学习使用clojure(1)的相关文章

理解Clojure STM 软件事务性内存

翻译说明: 英文原文来自:http://java.ociweb.com/mark/stm/article.html 原文包含了一些非STM的知识,也包括STM底层实现的内容,这里只是翻译了STM抽象层的内容,自认为这部分比较重要. 翻译是基于自己能够理解的方式翻译的,并非逐句翻译,目的是理解STM,理解如何调优STM,有逐句翻译强迫症的同学请不要喷我! 本人是在学习<Clojure编程乐趣>的"压力之下的 Ref"章节,遇到无法理解minHistory和maxHistory

Clojure经典实例

这篇是计算机类的优质预售推荐>>>><Clojure经典实例> 功能性编程全面指南 编辑推荐 本书涵盖150多个具体实例,展示了有经验的Clojure开发者如何用这门JVM语言完成各种编程任务.解决方案全面广泛:从构建动态网站和应用数据库到网络通信.云计算.高级测试策略等,面面俱到.这些实例源于全球60多名顶级Clojure开发者. 本书的每个实例不仅可以即学即用,而且其中提供的关于解决方案原理的讨论,让读者可以在模式.方法和技巧上举一反三,从而在遇到本书未提及的其他编

12306余票高效查询--clojure实现

写在前面 参考 https://www.cnblogs.com/guozili/p/6144561.html 由于各地CDN节点Cache更新存在时差,所以批量查询全国12306 CDN节点,找到最快的节点获取购票的必要信息. 该文章主要用户学习使用clojure并发获取网络资源,仅限用于学习. 本篇不涉及具体源码,只记录工具.方法. 主要方法 获取CDN节点 根据摸索,大约有两种方式: 直接使用站长工具->ping测试获取各个地方ping域名,该方式简单粗暴,但是可能不同时间ping获取的IP

2018年度业余学习总结

回首2018,时间如此之快:今年工作之余的学习也有较多收获,故予以总结,一来以便回顾查漏补缺,二来制定明年学习计划. 备注:本篇只总结业余时间的学习,工作相关的不便公开. 年度知识关键词 Clojure DNS协议 数据可视化 IoT数字电路 移动端开发 NAS 全栈 Postgresql 黎曼猜想 学习总结 clojure 学习使用clojure+clojurescript进行全栈开发,实现了单页面应用基本网站架构,和较为复杂的页面查询.完成了两个网页:工作的一些测试工具展示:自己的个人工具集

《Apache Spark源码剖析》

Spark Contributor,Databricks工程师连城,华为大数据平台开发部部长陈亮,网易杭州研究院副院长汪源,TalkingData首席数据科学家张夏天联袂力荐1.本书全面.系统地介绍了Spark源码,深入浅出,细致入微2.提供给读者一系列分析源码的实用技巧,并给出一个合理的阅读顺序3.始终抓住资源分配.消息传递.容错处理等基本问题,抽丝拨茧4.一步步寻找答案,所有问题迎刃而解,使读者知其然更知其所以然 内容简介 书籍计算机书籍 <Apache Spark源码剖析>以Spark

用Clojure学习The Little Schemer时的一些基本函数定义

;; learning The Little Schemer (def car first) (def cdr rest) (def cons clojure.core/cons) (def eq? =) (def list? clojure.core/list?) (defn atom? [x]   (not (list? x))) (defn s-exp? [x]   (or (atom? x) (list? x))) (defn null? [x]   (if (atom? x) (car

Clojure学习资料

以下大部分收藏自博客:http://blog.csdn.net/ithomer/article/details/17225813 官方文档: http://clojure.org/documentation API-Index * 中文资料(强烈推荐): 1. clojure入门教程  *http://xumingming.sinaapp.com/302/clojure-functional-programming-for-the-jvm-clojure-tutorial/ 2. clojure

Clojure学习笔记(一)——介绍、安装和语法

什么是Clojure Clojure是一种动态的.强类型的.寄居在JVM上的语言. Clojure的特性: 函数式编程基础,包括一套性能可以和典型可变数据结构媲美的持久性数据结构 由JVM提供的成熟的.高效的运行时环境:所以Clojure可以使用Java类库,反之Clojure库也可以被Java使用 跟JVM/Java的互操作能力使得很多架构.运维方面的需求可以得到满足:Clojure代码可以像Java代码一样被打包,然后部署到任何Java应用可以部署的地方 一套提供并发.并行语义的机制:Clo

Clojure学习05:谓词函数

谓词函数是一个判断式,一个返回bool值的函数. clojure中(lisp习惯)有个规定:对于判断功能的函数,函数名后面都有一个“?”号.所以只要看到后面带问号的函数名,就知道这一定是一个判断函数. 1. instance?  检查值是否是某种类型 user=> (instance? String "hello")true 2.fn?  判断参数是否代表一个函数 user=> (def a 10)#'user/auser=> (fn? a)falseuser=>