- Clojure是一个基于JVM的动态语言,支持函数式编程。
- https://clojure.org/下载最新版本,获得一个jar文件如clojure-1.8.jar。
- 直接运行
java -jar clojure-1.8.jar开启REPL。 - 如果要运行clojure程序文件,如
hello.clj,直接运行java -jar clojure-1.8.jar hello.clj。或者在repl中加载,如下:(load-file "hello.clj") - 定义函数
(defn hello [name] (str "Hello, " name))- 输出#’user/hello
- defn定义了一个函数。
- hello是这个函数的名称。
- hello函数接受一个参数name。
- str是一个函数调用,把由任意参数组成的列表连接成一个字符串。
- defn,hello,name和str都是symbols,代表了它们各自涉及事物的名称。
- #’前缀表示这个函数是用一个Clojure变量来保存的。
- 调用函数
(hello "caowentao")输出”Hello, caowentao” - 特殊变量
- *1,*2,*3存储了最近三次求值的结果
- *e存储了最后一个异常
- pst函数获得详细的堆栈跟踪
- 共享状态
#{}是空集合的字面表示法(conj #{} "Stu")向集合中添加元素(atom #{})创建atom引用类型对集合保持跟踪(def visitors (atom #{}))命名一个atom类型的引用- 使用
deref或者@提取引用内部的值。
- 引入名字空间
(require 'examples.introduction),单引号表示对库名的引用。- 使用名字空间的内容
(take 10 examples.introduction/fibs) - 使用refer将名字空间的所有内容映射到当前名字空间
(refer 'examples.introduction),然后直接使用fibs - 也可以使用use将两个步骤合并为一
(use 'examples.introduction) :reload标记用来强制重新加载一个程序库(use :reload 'examples.introduction)
- 查找文档
(doc str)(find-doc "reduce")
- 查看函数源码
- 使用repl库的source函数查阅某个Clojure函数源码
(use 'clojure.repl)(source identity)
- 使用Java的反射API
(ancestors (class [1 2 3]))
相关推荐
Clojure Programming
Clojure Programming by Chas Emerick, Brian Carper, and Christophe Grand Copyright © 2012 Chas Emerick, Brian Carper, and Christophe Grand. All rights reserved. Printed in the United States of America. Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472.
Clojure Programming读书笔记(0)
Down the Rabbit Hole 1. REPL is short for Read, Eval, Print and Loop 2. Clojure代码都是基于表达式(expressions)的,这些表达式基于以下规则: list,例如(+ 1 2),代表着调用,表达式的值就是调用的返回结果。list中第一个值相当于操作符,剩下的都是参数符号,比如
Programming Clojure(3rd) azw3
Programming Clojure(3rd) 英文azw3 第3版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书
ThingsBoard 多租户备份怎么做?定时任务、完整性校验与恢复演练全拆解
多租户的 IoT 平台里,备份是最容易被拖延、出事时最要命的一环。手动 pg_dump 几十个租户,既慢又容易漏;漏了也不知道,等真丢数据才发现备份根本不可用。读完这篇,你会给 [ThingsBoard](https://link.gitcode.com/i/8ca61f3ffe721ed74691cdd24409a271) 搭好一套"凌晨自动跑 + 失败自动告警 + 定期恢复演练"的备份方案,核
探索Clojure编程的艺术:一个开源学习资源的深度解析
探索Clojure编程的艺术:一个开源学习资源的深度解析 项目简介 是一个开源的在线书籍项目,旨在帮助开发者和新手深入理解Clojure这门富有创新的函数式编程语言。本书籍不仅详尽地介绍了Clojure的基础语法和核心概念,还涵盖了高级特性,如多态性、并发处理及与Java平台的互操作性。 技术分析 Clojure 是一门静态类型系统下的动态语言,它运行在JVM(Java虚拟机)上,因此可以充分利用...
如何写出极致优雅的Clojure:programming-clojure的惰性求值与trampoline优化技巧
**programming-clojure** 是经典书籍《Programming Clojure》(第二版,Stuart Halloway 与 Aaron Bedra 著)的官方示例代码仓库,汇集了数十个可运行的 Clojure 示例。其中**惰性求值**(lazy sequences)与 **trampoline 优化**最能体现 Clojure 的优雅写法:让数据“用到才算”,让递归永不撑爆
Clojure调Java互操作速查手册:programming-clojure的interop与import_static实例精讲
学Clojure时,很多人卡在同一个地方:**Clojure怎么调用Java?** 本文基于《Programming Clojure》官方示例仓库 **programming-clojure**,用最少的代码把互操作(Java Interop)常用技巧一次讲清,带你读懂 [interop.clj](https://link.gitcode.com/i/2fb89cd3581275ac496d9ac
Programming Clojure学习笔记——与Java一起工作
3.3 使用Clojure创建和编译Java类 Clojure的所有对象都实现了Java的特定接口: 1. Clojure数据结构实现了Java集合接口 2. Clojure函数实现了Runnable和Callable接口 Clojure可以在需要时很方便地在磁盘上生成一次性的代理或类,使用必要的一些Java代码片段。 创建Java代理 在Clojure中,可以使用代理来扩展
为什么选择Clojure做并发?programming-clojure并发编程示例深度剖析
做并发编程为什么越来越多团队选择 Clojure?答案在于它用**不可变数据 + 四大并发原语**(Atom、Ref、Agent、Trampoline)取代了传统的锁和共享可变状态。本文以《Programming Clojure(Clojure编程)》第二版的官方示例仓库 programming-clojure 为主线,带你深度剖析这些并发编程示例,看看没有一行"锁"的代码是如何做到线程安全的。
5步掌握Clerk:Clojure开发者的终极实时编程指南
Clerk是一款专为Clojure设计的Moldable Live Programming工具,它能将标准的Clojure命名空间转化为交互式笔记本,为开发者提供本地优先的实时编程体验。无论你是数据分析师、科研工作者还是Clojure开发者,Clerk都能帮助你快速构建数据分析和可视化工作流。 ## 为什么选择Clerk?传统笔记本的革新方案 传统计算笔记本如Jupyter存在诸多问题:代码难
Programming Clojure 英文电子版
你没看错 这是Programming Clojure 电子版的 纸质版本在美国亚马逊要到2009年3月才能上架 Paperback: 200 pages Publisher: Pragmatic Bookshelf (March 15, 2009) Language: English ISBN-10: 1934356336 ISBN-13: 978-1934356333 Format: PDF Description: Clojure is a dynamic language for the Java Virtual Machine, with a compelling combination of features: Clojure is elegant. Clojure's clean, careful design lets you write programs that get right to the essence of a problem, without a lot of clutter and ceremony. Clojure is Lisp reloaded. Clojure has the power inherent in Lisp, but is not constrained by the history of Lisp. Clojure is a functional language. Data structures are immutable, and functions tend to be side-effect free. This makes it easier to write correct programs, and to compose large programs from smaller ones. Clojure is concurrent. Rather than error-prone locking, Clojure provides software transactional memory. Clojure embraces Java. Calling from Clojure to Java is direct, and goes through no translation layer. Clojure is fast. Wherever you need it, you can get the exact same performance that you could get from hand-written Java code. Many other languages offer some of these features, but the combination of them all makes Clojure sparkle. Programming Clojure shows you why these features are so important, and how you can use Clojure to build powerful programs quickly.
Programming Clojure, 2nd Edition.pdf
Programming Clojure, 2nd Edition.pdf
Programming Clojure学习笔记——并发
6.5 使用Vars管理线程本地状态 当你调用def或defn创建一个动态变量时,只是创建了一个变量。 当你传一个初始值给def时,该初始值就成了def创建变量的根绑定(root binding),如: (def foo 10) 变量foo的根绑定被所有线程共享,验证如下: 当前线程中 user=> foo 10 新起的线程中 user=> (.start (Thread. (f
Clerk:Clojure 的本地优先笔记本
**示例演示**:[Clerk Demos](https://github.clerk.garden/nextjournal/clerk-demo/) **文档**:[Book of Clerk](https://book.clerk.vision)
Programming Clojure学习笔记——多重方法
8.2 定义多重方法 定义多重方法使用defmulti: (defmulti name dispatch-fn) name为多重方法的名字,Clojure将针对方法的参数调用dispatch-fn来选择多重方法的一个特定的方法(实现)。 考虑前一节的my-print函数,它只有一个参数,即需要打印的东西,可以基于参数的类型选择特定的实现。因此dispatch-fn必须是一个能返回参数类
Clojure测试最佳实践:用programming-clojure学会Cucumber风格测试与expectorate快照
programming-clojure 是《Programming Clojure》一书的官方示例代码库,内含一套可运行的 Clojure 测试示例。本文带你用这个真实项目学会 Clojure 测试最佳实践:clojure.test 的 Cucumber 风格(行为驱动)测试写法、`are` 数据表测试,以及 expectorate 快照式校验,帮你写出既简洁又可读的高质量测试。 ## 📦 项
760




被折叠的 条评论
为什么被折叠?



