首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Storm创始人Nathan Marz:反馈即一切

最令我感到意外,是当我问起Lisp历史讲述。他告诉,当时他需要一门更好语言用于AI研究,为了这个目的才发明了Lisp。而他自己,看起来真的并不怎么关心语言本身——AI才是他钟情所在。...在某个时间点,已完成了半本书写作,却意识素材组织方式并不妥当,于是弃置了所有旧稿,转而另起炉灶。这样做完全是值得,这读者反馈可以得到证实。...更有效沟通方式是讲故事——由读者感同身受的话题出发,一步步串联,直至你希望读者理解终极概括性观点。具体概括,总是胜过从概括具体。...假如Clojure不存在,会有哪些不同? Nathan:Clojure迄今用过最好语言。它允许轻松地使用不可变性及函数式编程等技术,令我效率大幅提高。...基于Lisp动态特性,使总能将Clojure塑造成符合最佳抽象状态。假如没有Clojure,Storm倒不会有什么不同,但实现过程将痛苦得多。

87640

Clojure 开发那些事

作为万里长城第一步,这篇文章首先如何入门 Clojure 语法,紧接着介绍 Clojure 开发环境搭建,然后介绍使用第三方库一些注意点,最后介绍一下常见测试方法。...基本数据结构可以参考其官方网站上到资料,发现一个特点,Lisp 语言英文介绍往往过于精炼,不适合初学者直接阅读,为了夯实基础,还是建议大家找本书来看,看书好处是不仅仅知道某个知识点,更重要是了解不同知识点之间区别与联系...《The Joy of Clojure》一书中有简单介绍,不过觉得初学者可以完全不用去关心实现细节,在遇到性能问题在考虑去优化。...最初环境也是仿照这份配置,然后一点点根据自己需求更加。...大部分都是一些简单语法介绍或者概念阐述,希望能够弥补这一块,把自己使用 Clojure 开发经历分享出来,供以后同学参考。

1.6K20
您找到你想要的搜索结果了吗?
是的
没有找到

函数式编程简介

与此同时,John McCarthy 发明了Lisp语言,现代Clojure就是Lisp方言之一。1966年,Niklaus Wirth发明了Pascal。...局部性影响,其本质是封装可变因素以避免其扩散代码各处。函数式给出了自己答案,消除可变因素。 高阶函数和惰性求值也非常有利于模块化。...为了提高统计效率,也可以进行分组,然后每组自行报数,最后统计结果。但是如果在白板上写个数字1,然后让大家来过来该这个数字,很大可能会出现错误,因为这个数字成为了竞态条件。...Clojure Persistent Vector 不可变树状结构 Zipper数据结构类似于文本编辑器 gap buffer,编辑文本,光标左边和右边分别是独立buffer,光标处也是单独...串联起来读来讲,前者明显是由于后者。这要是放在其他函数式语言上,效果更加显著。比如下面重构if-else控制语句Optional类型。

1.6K41

Clojure 学习入门(18)—— 数据类型

幸运是,通常你只需要在Clojure关联Java代码关注它。 表4-1....---- 在涉及不同类型数字运算Clojure会自动将结果转换到最精确类型。例如,当整数和浮点数相乘,结果将是浮点数。...然而,在高性能应用要注意,当操作数据大小超过Java Long类型,也就是数字超过9,223,372,036,854,775,807,你可能会感到运行缓慢。...注释 为保持简单,Clojure API计算函数与其他语言常见运算是一致。但不用担心:当表达式被解析和编译,它们会被替换为优化Java字节码,尽可能使用原始运算。...编程,连接键和值是一个很常见操作。然而,映射可用性远远不止于我们所认为它只是一个数据结构那样。 一个很重要例子是,结构可以做到面向对象编程对象90%能做事。

2.2K10

函数式编程那些事儿

函数式编程是一种编程范式,在其中它试图将每个函数都绑定纯数学函数。这是一种声明式编程风格,着重于解决什么而不是如何解决。...Clojure,Common Lisp,Erlang,Haskell和Scala是遵循函数式编程方法一些著名编程语言。...使用函数式编程风格编写代码,有能力编译器将能够: 记住结果 并行运算 等待评估结果 递归 在函数式编程范例,没有for和while循环。相反,函数式编程语言依赖于递归进行迭代。...递归是使用递归函数实现,递归函数会重复调用自己,直到达到基本情况为止。 引用透明性 一旦在函数式编程语言中定义了变量,就不允许在程序执行期间更改它们持有的值。这称为引用透明性。...这些一流函数被允许作为参数传递给其他函数,或者函数返回或存储在数据结构。 高阶函数是将其他函数用作参数和/或返回函数函数。在函数式编程语言中,一等函数可以是高阶函数。

85140

Clojure 运行原理之编译器剖析

为了更加具体描述 Clojure 运行原理,会分两篇文章来介绍。 本文为第一篇,涉及主要内容有:编译器工作流程、Lisp 宏机制。...第二篇将主要分析 Clojure 程序编译成 bytecode 如何保证动态语言特性以及如何加速 Clojure 程序执行速度,这会涉及 JVM 类加载机制、反射机制。 编译型 VS....LispReader.java 一般来说,具有复杂语法编程语言会把词法分析与语法分析分开实现为 Lexer 与 Parser,但在 Lisp 家族,源程序语法就已经是 AST 了,所以会把 Lexer...(目前有数字、字符、Symbol 这三类)与一个称为read table扩展机制(getMacro)驱动,read table 里面每项记录提供了由特性符号(称为macro characters)特定读取行为...macroexpand Macro 毫无疑问是 Lisp 屠龙刀,可以在编译自动生成代码: static Object macroexpand(Object form) { Object

97630

Clojure与LispClojure与Lisp

(艾伦·凯) "任何C或Fortran程序复杂一定程度之后,都会包含一个临时开发、只有一半功能、不完全符合规格、到处都是bug、运行速度很慢Common Lisp实现。"...Clojure 高速、干净、具有优先能力和优雅特征. 但是没有改变lisp "代码也是数据" 哲学. Clojure 语言在直觉和观感上比历史上lisp更易于阅读....2 函数也是一种数据类型 在Lisp语言中,函数与整数或字符串一样,也属于数据类型一种。它有自己字面表示形式(literal representation),能够储存在变量,也能当作参数传递。...在其他语言中,这种形式只是经过解析在后台产生,但是Lisp直接采用它作为表达形式。它由列表构成,而列表则是Lisp基本数据结构。 用一门语言自己数据结构来表达该语言,这被证明是非常强大功能。...Clojure 还是一个动态类型语言 我们可以选择添加类型信息来提高代码关键路径性能。

1.9K30

实用函数式编程

然而 -- 这种变化并没有 2000 2011 年那般戏剧化, 也没有 1990 2000 年翻天覆地. 我们又到了在计算机和软件技术上一个瓶颈期了吗?...最喜欢Clojure. 因为 Clojure 极其简单. 它是 Lisp 一个方言, Lisp 是一个十分简单和漂亮语言....在这里, 来稍微展示一下: 在 Java 一个函数: f(x); 现在, 将它转换为 Lisp 一个函数, 简单地将第一个括号移到左边即可: (f x)....在函数式编程, 你的确无法改变一个对象状态. 但是那又怎么样呢? 当你想要对一个对象进行改变, 得到一个新对象就好了, 之前对象无须改变. 一旦你习惯于此, 这是十分容易处理....如果你还在想你应该哪个语言学起, 推荐 Clojure. 本文译自: Pragmatic Functional Programming

1.1K20

一名ClojurianEmacs配置

在转向emacs之前,是一名忠实vim党,大学开始就不断折腾vim配置,还花过一段时间专门学习了vimscript,曾经惊叹于vimscript动态函数式风格优美和强大。...类似地,.vimrc配置文件在网络上也多如牛毛,华丽和酷炫插件极大地提升了vim操作性。尽管如此,还是乐于一砖一瓦地打造自己vim环境,竭力演化它变成心目中“编辑器之神”。...这就不得不提起Clojure这门lisp方言,出于对lisp和函数式编程痴迷,选择了基于JVMClojure作为自己偏好语言,而emacs天生为lisp而生。...,顾名思义,多个包下载源,给package-archives设置了5个包源,它们之间服从顺序优先级,即先从第一个源中下载包,如果没有,第二个源寻找,以此类推。...Clojure相关 载入use-package之后,需要开始配置自己强大Clojure开发环境了。

2.7K20

Clojure 学习入门(1)—— 学习资料

它第一个对外发行版是在2007年秋季时候发布,在2009年5月发行了第一个稳定版,这个时候,它已经培育了一个活跃、充满热情社区,一个欣欣向荣开发工具和类库生态系统,它们被用在迅速增长一系列专业应用程序...烧录进" (嵌入) Clojure编程语言底层....Clojure虽然有很强学术背景支持,但是绝不是一门只在象牙塔语言,每天都有众多开发者在各自开发领域内使用它。 动态而强有力 (没错,它是lisp!)...但是,历史上也有对lisp进行诋毁的人,或许称为抱怨更为合适. lisp发展过程,没有完整规范, 各种不兼容实现,陈旧落伍限制.cruft accumulate 在其存在四五十年里一直存在....Clojure 高速、干净、具有优先能力和优雅特征. 但是没有改变lisp "代码也是数据" 哲学. Clojure 语言在直觉和观感上比历史上lisp更易于阅读.

1.3K10

来来来,咱们元编程入个门

正好之前有个读者在留言中诉苦,说看了之前文章 谈谈抽象 不解馋,虽然学了 clojure 却总也厘不清 macro 使用,跟着书上例子可以写下去,脱离了例子却步履维艰,总觉得自己对于 metapgrogramming...lisp(以下谈到 lisp,皆为其方言 clojure)是一门直接把类似 AST 语法暴露给程序员语言。因此,它语法看起来会非常别扭: ?...而 elixir 虽不是 lisp语言,语法和 lisp 截然不同,但它也语言设计之初,就考虑把语法树暴露给程序员: ?...在合适地方 unquote 是写 macro 基本能力。 在使用 macro 进行 metaprogramming ,最常见一个坑是表达式反复求值。我们看一个函数: ?...在 lisp 里,unquote 是一个简单符号(比如 clojure 用 ~ 表示 unquote),所以很容易误用。

933100

clojure基础入门(一)

阅读目录: 概述 变量 运算符 流程控制 总结 概述 clojure是一种运行在JVM上Lisp方言,属于函数式编程范式,它和java可以方便互相调用,这样开发程序可以很好结合java和clojure...解压后用命令行进入clojure目录下,输入下面命令进入REPL命令行交互界面: java -cp clojure-1.7.0.jar clojure.main ?...欢迎进入clojure世界。  ? 变量 Clojure变量可以def关键字来声明:  ? clojure数据类型是弱类型,对应javaobject,然后通过变量名直接调用。...clojurelisp习惯)有个规定:对于判断功能函数,函数名后面都有一个“?”号。所以只要看到后面带问号函数名,就知道这一定是一个判断语句。 user=> (fn?...测试数字谓词有:even?,neg?,odd?,pos?,zero?。 总结 Clojure里面的每个操作被实现成以下三种形式:  函数(function)     文中以defn定义

1.5K30

《架构整洁之道》第 6 章 函数式编程

整数平方在书中,举了一个整数平方例子,分别以Java代码,和Clojure代码输出前25个整数平方值。其区别在于,在Clojure,没有出现一个变量。函数式编程语言中变量,是不可变。...不可变性与软件架构所有的竞争问题,死锁问题,并发更新问题,都是由于可变变量导致。所以我们应该关注不可变性。...可变形隔离一个架构设计良好应用程序,应当将程序内部服务进行切分,分为可变和不可变组件,不可变组件使用纯函数方式来执行任务,期间它不更改任务状态和变量(应当也包含数据库)。...可变和不可变之间组件使用可变组件来通讯。最终等到需要修改状态(数据库),应当使用事务性数据库,避免同步更新和竞争状态发生。大部分处理逻辑应当在不可变组件,可变组件逻辑越少越好。...事件溯源事件溯源核心是不再对数据进行删改操作,这样也能避免任何可变变量。例如银行账号余额或库存数据,每一次删改就是一条记录,需要取数据,将全部流水拉出来计算数据,并上锁。

17660

2016年1月编程语言排行榜:Java荣获2015年度冠军

猛然一看,Java这个古老语言赢得这个奖项很令人惊艳,特别是考虑Java获得同一奖项是在整整10年以前。...退一步讲,Java是目前在企业后端市场排名第一仍然在增长移动应用开发市场(Android)。此外,Java具有现代语言常见特性,如lambda表达式和流等语言。Java未来是光明。...35),Haskell(#96至#39)和Rust(#126〜#47),而Go,Hack和Clojure即将进入前50名。...预计Java,PHP(新7版本),JavaScript和Swift会一直处在2016年十大赢家行列, Scala可能会永久处于前20位置,而Rust,Clojure,Julia和TypeScript...也将在图表呈现上升趋势。

91660

期望与痛:SICP

其实,在2013年,还在ThoughtWorks,就曾经和同事一起整理了一份ThoughtWorks读书雷达,在编码实践象限推荐了SICP。...有人不无夸张但相当在理地说:自SICP以降,无并发编程没有任何新鲜问题;如果你觉得自己有了新发现,要么是SICP已经写过只是你不知道,要么是你想错了。 这一段是熊节推荐。...可惜当时出差在外,没有机会参与这个有趣活动。至今想来抱憾。 按:clojure一直想学却一直未学一门语言,而SICP是一直想读却一直未读一本书。...隐隐地,总觉得阅读此书是重要,却并非紧急;于是无意识让许多紧急却并不重要事情抢到了前面,阅读优先级一退再退。若按小刀说法,则认为阅读此书与解决自己痛点不符。...读了它,未必能成道;不读它,也足以成为高手;得道可能万存一,于是就放弃了。 剖析心路,大抵如此。 既然给英杰说要逼逼自己,就不要拖延到明天了。明日复明日,也许真要拖到老了。

1.9K60

clojure基础入门(一)

阅读目录: 概述 变量 运算符 流程控制 总结 概述 clojure是一种运行在JVM上Lisp方言,属于函数式编程范式,它和java可以方便互相调用,这样开发程序可以很好结合java和clojure...解压后用命令行进入clojure目录下,输入下面命令进入REPL命令行交互界面: java -cp clojure-1.7.0.jar clojure.main ?...欢迎进入clojure世界。  ? 变量 Clojure变量可以def关键字来声明:  ? clojure数据类型是弱类型,对应javaobject,然后通过变量名直接调用。...clojurelisp习惯)有个规定:对于判断功能函数,函数名后面都有一个“?”号。所以只要看到后面带问号函数名,就知道这一定是一个判断语句。 user=> (fn?...测试数字谓词有:even?,neg?,odd?,pos?,zero?。 总结 Clojure里面的每个操作被实现成以下三种形式:  函数(function)     文中以defn定义

1.3K40

2024年18种热门编程语言你喜欢哪个?

喜欢Clojure。原因有三。第一,想通过学习Clojure来掌握函数式编程。第二,Clojure鼓励使用不可变数据和纯函数,语法相比Scala相对简单一些。...作为做了30年软件,且着迷于面向对象和函数式编程和设计程序员,花了几个晚上时间,2023年像TIOBE这样编程语言排名榜单,选择了18种热门编程语言进行解析,以便帮你选择适合语言进行学习...⚠️但当业务逻辑变得复杂,且项目变大,大量代码难以维护。面向对象式语言,使用对象封装数据和行为,便于用面向对象方式设计复杂大型项目。...这种语言强调使用纯函数,意味着相同输入总是产生相同输出,且没有副作用(如不会修改全局状态)。这使得程序更易于理解、测试和调试。不可变性和纯函数特性使函数式语言更适合并发编程。...)Java(常见于大型企业级应用)Kotlin(比Java更简洁)JavaScript(Web开发首选语言)TypeScript(比JavaScript更好维护)Ruby(像用自然语言一样编程)PHP(

37310

写本Racket入门书

一个朋友曾经开玩笑跟我说过:「学lisp就是没事找事,自己自己过不去」这话在理。所以,两三年前与clojure嬉戏时候,在心里,她始终就像朱紫国那个金圣娘娘,身披七彩霞裳,跟刺猬一样,亲近不得。...也是这个原因,在简简单单了解clojure基本语法后,便对她敬而远之。...但Paul Graham在「黑客与画家」lisp无比推崇又让一直如鲠在喉,不征服lisp仿佛自己始终没能窥探编程奥义,那种感觉,估计和搞到了法国却搞不定约瑟芬拿破仑一样一样。...邂逅变成了天天守望,每天早上起床9点前,下午6点后至睡觉,都沉浸在与Racket互动带来愉悦之中,以至于回家像女神索吻,女神吓得一边躲一边娇嗔:「爸爸要刮胡子了」,才意识,胡子又开始大面积覆盖那黝黑透着阳光脸蛋...不少读者在看了周二文章「走进 racket(lisp) 世界」后自豪地说自己学校就开设了Racket课程,作为编程入门语言,这真是羡煞死

2.3K80

一段集合操作不同语言表达

看到这样一条微博,觉得挺有意思,就记录在这里: 所谓对比,Java 真是足够啰嗦: 图不清楚,来再叙述一下。要做事情就是,把原有列表里面的每个元素都变成大写,再放到一个新列表里面去。...; for(String s : list) list2.add(s.toUpperCase());  这是 Java8 版本(移步阅读:《Java8 集合 Lambda 表达式》): List...PHP 写法看起来简单,但还是过程式:  array_map("strtoupper", array('andy','michael','thomas')); Clojure:  (map clojure.string...scala 函数式特性,保证链表不变性,每次操作会产生新链表,但是这个特性在这里是好处,简洁,但在别处就未必了。...当然,如果你需要改变链表自己,那就要使用 ListBuffer。

24310
领券