Clojure语言本身自已有提供了四种集合类型,List,Vector,Set,Map.同时它也可以使用Java的集合类型砂,但是这种方式目前并不推荐使用,因为Clojure集合类型和Java语言的集合类型还是有很大区别的,主要体现在
集合内容不可改变,集合的内容可以多种类型以及持久化。持久化意味着当你在对一个集合的操作都会产生一个新的集合对象(如:插入,删除......),而老的集合对象依然是存在的。
List
List的可以使用如下方式定义:
(def list1 '("aa" "bb" "cc"))
(def list1 (list "aa" "bb" "cc"))
(def list1 (quote ("aa" "bb"
"cc")))
以上三种方式都可以定义一个List,和Java中一样List是有序的。
Vector
vector可以使用如下方式定义:
(def v ["v1" "v2"])
(def v (vector "v1" "v2"))
同样vector也是有序的,在Clojure的方法参数定义就是使用的Vector,比如定义一个类以于Java的public void say(String
name)用Clojure则使用如下的方式
(defn say [name])
Set
set可以使用如下方式定义:
(def s {"aa" "bb" "cc"})
(def s
#{"aa" "bb" "cc"})
(def s (hash-set "aa" "bb" "cc"))
Set分可有序set和无序set,上面示例中的"hash-set"就是代表 无序set,而有序set则可用 sorted-set来定义.
可以用函数 contains? 来检测一个set中是否存在某个元素 (contains? s "aa")
如果s中存在"aa"元素,则返回true,否则返回false.
contains?函数可以使用在Set和Map无素上。
同Java中一样。Set中的元素是唯一的。
Map
map可以使用如下方式定义:
(def m {"k1" "v1","k2" "v2"})
(def m (hash-map "k1" "v1","k2"
"v2"))
同样,map也分为有序和无序的,如果想申明有序的map则使用 sorted-map即可。
可以使用函数keys,vals得到键集合和值集合.(keys m)
get函数可以根据key取得相应的val值。(get m "k1")
返回的是"v1"
get也可以用在 其它的集合中,比如从Vector中取元素的值.(get v 1)
代表取出集合v中的第2个无素。注意,集合的编号是从0开始的。
本部分主要简单介绍了一下Clojure中的集合的基本用法。后续会继续介绍更多的一些东西。
分享到:
相关推荐
Typed Clojure 保留了 Clojure 的优势,是 Clojure 的可选类型系统,也可以说是 Clojure 的一个库,改善了大量的静态类型安全检测。主要特性:从 Java 中保护你的 Clojure 程序,进行安全的互操作,正确的使用外部 ...
例如,Clojure提供了丰富的集合类型和函数式编程特性,帮助开发者以更加优雅的方式编写程序。 - **Lisp Reloaded**:尽管Clojure保留了Lisp的一些核心理念,如宏定义和对元编程的支持,但它也摒弃了一些过时的概念...
《Clojure电子书》集合包含了三本关于Clojure编程的重要书籍和一个Leiningen的Windows安装程序,这对于学习和深入理解Clojure语言至关重要。Clojure是一种基于Lisp的函数式编程语言,它运行在Java虚拟机(JVM)上,...
- **Clojure 入门**:介绍 Clojure 的安装过程、REPL(Read-Eval-Print Loop)环境的使用方法以及简单的编程实例。 - **数据结构和序列操作**:解释 Clojure 中常用的数据结构,如列表、向量、集合和映射,并展示...
同时,Clojure提供了强大的映射(map)、序列(sequence)和集合(set)操作,以及高阶函数,如`map`、`filter`和`reduce`,这些都极大地提高了代码的简洁性和可读性。 Clojure与Java紧密集成,可以直接调用Java库...
书中详细介绍了Clojure的语法特性,如S表达式(S-expressions)、宏(macros)和动态类型系统。S表达式是Clojure代码的基本形式,它提供了简洁的表示方式和强大的抽象能力。宏允许程序员在编译时进行代码操作,为...
使用Clojure编程,随着程序的增长,并不会变得更复杂难以理解,反而会变得更简单、表达性更强。Clojure鼓励开发者尝试在其他语言中过于复杂而通常不会尝试的事情,例如并发编程、不可变性和惰性数据结构。因为...
它全面介绍了Clojure的基础知识,包括数据结构、控制流、函数式编程概念、元编程以及与Java的交互。"Programming Clojure_modify.pdf"可能是这本书的一个修改版或更新版本,可能包含了作者的修订或者社区的贡献。 2...
Lacinia将Clojure的这些优点带入了GraphQL领域,允许开发者用熟悉的Clojure语法定义GraphQL类型、字段和解析器。这种结合使得开发者可以利用Clojure的宏系统来创建复杂的GraphQL schema,同时保持代码的可读性和可...
在学习Clojure的过程中,Handbook介绍了语言的基础知识,如REPL(Read-Eval-Print Loop)交互式环境、变量定义、基本类型、类型判断、执行多条语句的do表达式、条件语句、循环语句、正则表达式、命名空间、结构体...
### Clojure入门教程知识点概述 #### 一、Clojure简介 - **Clojure**是一种运行在Java虚拟机(JVM)上的动态编程语言,它继承了Lisp家族的强大功能,同时结合了现代编程语言的优点,如面向对象编程和函数式编程。 ##...
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 ...
1. **基础语法与构造**:这一部分介绍了Clojure的基础语法,包括数据类型、变量定义、条件判断和循环等基本概念。 2. **Clojure标准库**:Clojure的标准库提供了丰富的功能,包括集合操作、文件处理、网络通信等功能...
2. **强类型系统**:尽管 Clojure 不强制显式声明变量类型,但它具备静态类型的特性,通过类型推断保证了程序的稳定性和性能。 3. **内存安全的并发模型**:Clojure 使用软件事务内存(Software Transactional ...
[2009] Programming Clojure.(Stuart Halloway).[1934356336].pdf [2010] Functional Programming with Clojure - Simple Concurrency on the JVM.(Tim Berglund, Matthew McCullough).[193650202X].pdf [2010] ...