这篇文章介绍clojure的变量,函数,宏的定义及调用
1. 变量定义
变量定义使用def关键字,clojure中的变量是常量,一旦定义就不可改变
另外变量定义是全局可见的,比如你在函数中使用def定义变量,执行该
函数后,在函数体外是可以访问该变量的
=>(def a 10);定义变量a的值
10
2. 函数定义
函数定义有多种方式,具体可看官方文档,这里以defn为例子
(defn name doc-string? attr-map? [params*] body
(defn name doc-string? attr-map? ([params*] body) + attr-map?)
例子:
=> (defn add [a b] (+ a b))
=>(add 1 2)
3
还可以用fn, 用于定义匿名函数
=> (def add (fn [a b] (+ a b)))
=>(add 1 2)
3
还可以用 读取器宏‘#’来定义匿名函数
=>(def add #(+ %1 %2)); %1,代表第一个参数
3. 宏定义
宏定义使用 defmacro,宏非常强大,也是一个难点,
- (defmacro name doc-string? attr-map? [params*] body)
- (defmacro name doc-string? attr-map? ([params*] body) + attr-map?)
以下定义了一个执行三次表达式的宏
=>(defmacro triple-do [form]
(list 'do form form form)
)
=>(triple-do (println "test")); 打印3次test
相关推荐
clojure-utils, 各种小型但方便的clojure实用程序函数库 各种小型但方便的Clojure实用程序函数库特别关注:Clojure.java - 用于从Java调用Clojure的实用工具函数的Java类arrays.clj - 操作Java数组core.clj - 应该在...
clojure.core函数,但具有更好的文档(包括示例)。 clojure.core函数的变体,可以接受更多种类的输入。 实用功能的抓包,重要的是,您可以将其复制到自己的代码中,而不必担心许可证或信用等问题。 作为一个试图...
backtick, Clojure引用读取器宏作为正常宏的语法 引号提供语法引用( aka quasiquote ) 阅读器宏作为正常宏的Clojure库。动机web服务的反向引用,叫做 syntax syntax,叫做语法引用,使用带有Clojure符号解析的名称...
本书向读者展示了如何采用函数式方案来替代或简化面向对象编程中使用的诸多通用模式,同时还介绍了一些在函数式世界中广泛使用的模式。
Scala与Clojure函数式编程 Functional.Programming.Patterns.in.Scala.and.Clojure
该库提供了对带有可选参数的Clojure函数的改进处理。 该库提供了defn+opts宏,该宏定义了带有可选参数的函数。 语法类似于Clojure的defn之一,只允许使用一个函数体。 支持可选参数的文档字符串。 当defn+opts函数...
Toucan 一个优雅的高级Clojure库,用于定义应用程序模型并从DB中检索它们
defun:定义带有参数模式匹配的clojure函数的宏,就像erlang或elixir
纯IO 在 Clojure 中实现 IO ...定义一个 IO monad 的实例 ( require '[clojure.pure-io.impl :refer [println' read-line']] '[clojure.algo.monads :refer [with-monad]] '[clojure.pure-io.monad :refer [io-m
您可以先使用defgen宏定义递归的fib生成器: ( defgen fib [x] ( if ( < x 2 ) 1 ( + ( fib ( dec x)) ( fib ( - x 2 ))))) defgen使用相同的语法如defn但与沿功能产生的发电机。 还有fgen宏以类似的方式替代fn ...
Typed Clojure 保留了 Clojure 的优势,是 Clojure 的可选类型系统,也可以说是 Clojure 的一个库,改善了大量的静态类型安全检测。主要特性:从 Java 中保护你的 Clojure 程序,进行安全的互操作,正确的使用外部 ...
这是Programming Clojure 电子版的 纸质版本在美国亚马逊要到2009年3月才能上架 Paperback: 200 pages Publisher: Pragmatic Bookshelf (March 15, 2009) Language: English ISBN-10: 1934356336 ISBN-13: 978-...
您可以使用decorate宏将其应用于现有函数: (decorate handle-request (wrap-logging "request handler")) 这将重新定义句柄请求功能,从而保持元数据完整。 装饰库提供了四个宏: (redef name value) -重新定义...
clojure clojure clojureclojure clojure
《Scala与Clojure函数式编程模式:Java虚拟机高效编程》向读者展示了如何采用函数式方案来替代或简化面向对象编程中使用的诸多通用模式,同时还介绍了一些在函数式世界中广泛使用的模式。如果你是一名Java程序员,...
Practical Clojure Clojure语言书籍
Clear, practical Clojure for the professional programmer Professional Clojure is the experienced developer's guide to functional programming using the Clojure language. Designed specifically to meet ...
Clojure is an opinionated language—it doesn’t try to cover all paradigms or provide every checklist bullet-point feature. Instead it provides the features needed to solve all kinds of real-world ...
def-clj.zip,用于函数定义的clojure宏。用于函数定义的clojure宏
【1】[Clojure编程乐趣](The Joy of Clojure).pdf 【2】Clojure – Functional Programming for the JVM中文版.pdf 【3】Clojure Cookbook.pdf 【4】Clojure Data Analysis Cookbook.pdf 【5】clojure Hand book...