storm-clojure
clojure方法定义 defn 宏用来定义一个函数。它的参数包括一个函数名字,一个可选的注释字符串,参数列表,然后一个方法体。而函数的返回值则是方法体里面最后一个表达式的值。所有的函数都会返回一个值, 只是有的返回的值是nil。 fn定义匿名函数,通过fn定义的函数可以包含任意个数的表达式,而通过#(..)只能使用一个表达式 ,如果想包含多个表达式,那么就可以用do包含起来,如果只有一个参数,通过%获得,如果有多个参数可以通过%1 %2获得
(def years [1940 1944 1961 1985 1987]) (filter (fn [year] (even? year)) years) ; long way w/ named arguments -> (1940 1944) (filter #(even? %) years) ; short way where % refers to the argument
宏defmulti
和defmethod
经常被用在一起来定义 multimethod. 宏defmulti
的参数包括一个方法名以及一个dispatch函数,这个dispatch函数的返回值会被用来选择到底调用哪个重载的函数。宏defmethod
的参数则包括方法名,dispatch的值, 参数列表以及方法体。一个特殊的dispatch值:default
是用来表示默认情况的 — 即如果其它的dispatch值都不匹配的话,那么就调用这个方法。defmethod
多定义的名字一样的方法,它们的参数个数必须一样。传给multimethod的参数会传给dipatch函数的。实现类似java的重载
(defmulti what_am_i class) (defmethod what_am_i Number [args] (println args "is num")) (defmethod what_am_i String [args] (println args "is String")) (defmethod what_am_i :default [args] (println args "is default")) (what_am_i 19) (what_am_i "luochao") (what_am_i true)
clojure提供了很多函数来充当谓词功能,测试条件是否成立,他的返回值是ture或者false,在clojure语言中,false和nil被解释成false,其他的都为true包括0,谓词函数一般以?结尾,class?
,coll?
,decimal?
,delay?
,float?
,fn?
,instance?
,integer?
,isa?
,keyword?
,list?
,macro?
,map?
,number?
,seq?
,set?
,string?
clojure反射是一种获取对象的特性
structMap
定义一个
(def vehicle-struct (create-struct :make :year :day))
or (defstruct vehicle-struct :make :year :day)
(def vehicle (struct vehicle-struct "to" 121 12))
定义一个访问函数 (def make (accessor vehicle-struct :make))
(make vehicle)
(vechicle )
partial
函数创建一个新的函数 — 通过给旧的函数制定一个初始值
; Note the
use
of
def
instead of
defn
because partial returns
; a function that is then bound to
"times2"
.
(
def
times2 (partial * 2))
(times2 3 4) ; 2 * 3 * 4 -> 24
reduce
函数接收一个需要两个参数的函数, 一个可选的value以及一个集合。它会以value以及集合的第一个元素作为参数来调用给定的函数(如果指定了value的话), 要么以集合的第一个元素以及第二个元素为参数来调用给定的函数(如果没有指定value的话)。接着就以这个返回值以及集合里面的下一个元素为参数来调用 给定的函数,知道集合里面的元素都被计算了 — 最后返回一个值. 这个函数与ruby里面的inject
以及Haskell里面的foldl
作用是一样的。
memoize
函数接受一个参数,它的作用就是给原来的函数加一个缓存,所以如果同样的参数被调用了两次, 那么它就直接从缓存里面返回缓存了的结果,以提高效率, 但是当然它会需要更多的内存。(其实也只有函数式编程里面能用这个技术, 因为函数没有side-effect, 多次调用的结果保证是一样的)
map
对一个给定的集合里面的每一个元素调用一个指定的方法,然后这些方法的所有返回值构成一个新的集合(LazySeq)返回。这个指定了函数也可以有多个参 数,那么你就需要给map多个集合了。如果这些给的集合的个数不一样,那么执行这个函数的次数取决于个数最少的集合的长度。比如:
1
2
3
|
; The next line uses an anonymous function that adds 3 to its argument. ( map #(+ % 3) [ 2 4 7 ] ) ; -> (5 7 10)
( map + [ 2 4 7 ] [ 5 6 ] [ 1 2 3 4 ] ) ; adds corresponding items -> (8 12)
|
apply
把给定的集合里面的所有元素一次性地给指定的函数作为参数调用,然后返回这个函数的返回值。所以apply与map的区别就是map返回的还是一个集合,而apply返回的是一个元素, 可以把apply看作是SQL里面的聚合函数。比如:
1
|
( apply + [ 2 4 7 ] ); -> 13
|
(defn teenager? [age] (and (>= age 13) (< age 20)))
(def no-teen? (complement teenager?))
(println (no-teen? 47))
complement取反
(defn time2 [n] (* n 2))
(defn minus3 [n] (- n 3))
(def my-composition (comp time2 minus3))
(println (my-composition 4))
后一个函数执行结果 ,作为前一个函数的参数
相关推荐
标题中的“Python-一个Leiningen插件将clojure与jupyter笔记本集成”指的是一个用于Clojure编程语言的工具,它允许开发者通过Leiningen这个Clojure项目管理工具来使用Jupyter Notebook。Jupyter Notebook是一种交互...
Gorilla是Clojure笔记本电脑风格的丰富REPL。 如果您有兴趣,请访问其。 贡献 非常欢迎以评论,批评,错误报告或代码的形式进行贡献:-)如果您有重大更改的想法,请给我发送电子邮件,以便我们协调工作。 注意:这...
Clojure Handbook是一份关于Clojure编程语言的学习笔记,旨在为读者提供一个方便的备查材料,以加深对Clojure语言特性的理解和记忆。 首先,Clojure作为Lisp语言家族的一员,具有一些独特的特性。Lisp语言以其极简...
这篇“Clojure学习笔记”将带你深入了解Clojure的核心概念和实践技巧。 一、Clojure的基础 1. 数据结构:Clojure提供了丰富的内置数据结构,如列表(Lists)、向量(Vectors)、映射(Maps)和集合(Sets)。这些...
本学习笔记主要关注的是如何使用Clojure语言来构建微服务。 Clojure是一种基于Lisp方言的函数式编程语言,它运行在Java虚拟机(JVM)上,充分利用了Java生态系统的优势。在微服务领域,Clojure因其简洁的语法、强大...
读书笔记:Scala与Clojure函数式编程模式Java虚拟机高效编程 >源码
Clojure是一门现代的Lisp方言,运行于JVM(Java虚拟机)之上,它结合了Lisp语言的强大表达能力和JVM平台的广泛生态。Clojure保留了Lisp的核心特性,如代码即数据(Code is Data),以及基于表达式的语法。在Clojure ...
读书笔记:《Scala与Clojure函数式编程模式Java虚拟机高效编程》学习代码记录
Clojure学习笔记 为什么要学习Clojure 我写Java也有10多年了,其间用过Python、PHP、Ruby、Groovy、JS等动态语言。Java相对C、C++来说有明显的优势,可以说是一种更高级的语言,高级语言带来的优势是能用更少的代码...
用于Clojure的Jupyter内核-在Jupyter Lab,Notebook和Console中运行Clojure代码。 目录 入门 在存储库的examples文件夹中,有3个示例笔记本,它们显示了clojupyter的某些功能。 请参阅显示了有关如何显示HTML和使用...
Markdown是一种轻量级的标记语言,常用于编写文档、笔记或博客。ClojureTextEditor支持Markdown编辑,意味着用户可以直接在编辑器中编写和预览Markdown格式的内容,无需切换到其他工具。编辑器可能包含了实时预览...
首轮, lein do clean, cljsbuild once prod然后启动一个REPL并运行, (require 'grapple.server)(grapple.server/start-server {})内置组件除了Clojure原语之外,当前还有四个可呈现的内置组件: grapple.table/...
笔记 这不是万无一失的。 如果我违反了您的要求,请让我知道。 $ clojure -Sdeps '{ :deps {pack/pack.alpha { :git/url " ...
这些源代码文件扩展了./resources中的笔记内容,提供了解决SICP练习的实际实现。学习者可以通过阅读和修改这些代码,加深对Clojure语法和SICP概念的理解。 在Clojure中实现SICP的益处在于: - **函数式编程的思维...
Org Mode是Emacs中的一个高度可扩展的文本编辑模式,广泛用于笔记、项目管理、任务追踪甚至编写文档。`ob-clojure-literate`正是将Clojure代码嵌入到Org Mode文档中的桥梁,使得开发者能够在同一个文件中编写文档和...
Clojure-Unix 学习困难又令人兴奋。 它改变了我对代码的思考方式,帮助我看到数据流经由... 在这里,您会发现一些有关Clojure如何帮助我学会摆脱烦恼并热爱Unix管道的笔记。 ( ) 版权所有2015 这项工作是根据。
在这个压缩包文件中,可能包含了源代码、教程、笔记或者其他有助于理解和掌握Clojure的材料。 Clojure的特点之一是其强大的列表处理能力,源于Lisp的传统。它鼓励使用纯函数和不可变数据结构,这有助于编写出简洁、...
`covid19-clj-viz` 是一个专注于COVID-19数据可视化的项目,它利用Clojure编程语言和Vega库来创建交互式的数据图表,特别是地图。这个项目为数据科学家、程序员和对COVID-19数据分析感兴趣的人提供了一个学习和实践...
这些文件可能是Clojure源代码文件(.clj或.cljs),也可能是笔记或测试脚本。通过研究这些文件,你可以更深入地了解Clojure的语法、函数、数据结构以及如何在实际项目中应用它们。 总结来说,Clojure是一种强大且...
这个"kickstart-master"压缩包可能包含了上述学习路径中的所有资源,包括项目文件、笔记、练习和可能的解决方案。通过逐步学习和实践,Clojure新手将能够快速上手并掌握这个强大而富有表现力的语言。