`
touchmm
  • 浏览: 1039832 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Clojure Collections 集合类型简要介绍

 
阅读更多

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中的集合的基本用法。后续会继续介绍更多的一些东西。

0
2
分享到:
评论

相关推荐

    Clojure可选类型系统TypedClojure.zip

    Typed Clojure 保留了 Clojure 的优势,是 Clojure 的可选类型系统,也可以说是 Clojure 的一个库,改善了大量的静态类型安全检测。主要特性:从 Java 中保护你的 Clojure 程序,进行安全的互操作,正确的使用外部 ...

    Programming Clojure 英文电子版

    例如,Clojure提供了丰富的集合类型和函数式编程特性,帮助开发者以更加优雅的方式编写程序。 - **Lisp Reloaded**:尽管Clojure保留了Lisp的一些核心理念,如宏定义和对元编程的支持,但它也摒弃了一些过时的概念...

    clojure电子书

    《Clojure电子书》集合包含了三本关于Clojure编程的重要书籍和一个Leiningen的Windows安装程序,这对于学习和深入理解Clojure语言至关重要。Clojure是一种基于Lisp的函数式编程语言,它运行在Java虚拟机(JVM)上,...

    Clojure Data Analysis Cookbook

    - **Clojure 入门**:介绍 Clojure 的安装过程、REPL(Read-Eval-Print Loop)环境的使用方法以及简单的编程实例。 - **数据结构和序列操作**:解释 Clojure 中常用的数据结构,如列表、向量、集合和映射,并展示...

    Clojure编程乐趣]+clojure_programming.pdf

    同时,Clojure提供了强大的映射(map)、序列(sequence)和集合(set)操作,以及高阶函数,如`map`、`filter`和`reduce`,这些都极大地提高了代码的简洁性和可读性。 Clojure与Java紧密集成,可以直接调用Java库...

    programming-clojure-3rd

    书中详细介绍了Clojure的语法特性,如S表达式(S-expressions)、宏(macros)和动态类型系统。S表达式是Clojure代码的基本形式,它提供了简洁的表示方式和强大的抽象能力。宏允许程序员在编译时进行代码操作,为...

    Practical Clojure.pdf

    使用Clojure编程,随着程序的增长,并不会变得更复杂难以理解,反而会变得更简单、表达性更强。Clojure鼓励开发者尝试在其他语言中过于复杂而通常不会尝试的事情,例如并发编程、不可变性和惰性数据结构。因为...

    clojure1.3.0及资料

    它全面介绍了Clojure的基础知识,包括数据结构、控制流、函数式编程概念、元编程以及与Java的交互。"Programming Clojure_modify.pdf"可能是这本书的一个修改版或更新版本,可能包含了作者的修订或者社区的贡献。 2...

    Lacinia纯Clojure实现的GraphQL

    Lacinia将Clojure的这些优点带入了GraphQL领域,允许开发者用熟悉的Clojure语法定义GraphQL类型、字段和解析器。这种结合使得开发者可以利用Clojure的宏系统来创建复杂的GraphQL schema,同时保持代码的可读性和可...

    Clojure Handbook(2012.11.1)

    在学习Clojure的过程中,Handbook介绍了语言的基础知识,如REPL(Read-Eval-Print Loop)交互式环境、变量定义、基本类型、类型判断、执行多条语句的do表达式、条件语句、循环语句、正则表达式、命名空间、结构体...

    Clojure入门教程- Clojure – Functional Programming for the JVM中文版

    ### Clojure入门教程知识点概述 #### 一、Clojure简介 - **Clojure**是一种运行在Java虚拟机(JVM)上的动态编程语言,它继承了Lisp家族的强大功能,同时结合了现代编程语言的优点,如面向对象编程和函数式编程。 ##...

    Professional.Clojure.1119267277

    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 ...

    the joy of clojure.pdf

    1. **基础语法与构造**:这一部分介绍了Clojure的基础语法,包括数据类型、变量定义、条件判断和循环等基本概念。 2. **Clojure标准库**:Clojure的标准库提供了丰富的功能,包括集合操作、文件处理、网络通信等功能...

    clojure1.4包

    2. **强类型系统**:尽管 Clojure 不强制显式声明变量类型,但它具备静态类型的特性,通过类型推断保证了程序的稳定性和性能。 3. **内存安全的并发模型**:Clojure 使用软件事务内存(Software Transactional ...

    Clojure电子书合集1(12本)

    [2009] Programming Clojure.(Stuart Halloway).[1934356336].pdf [2010] Functional Programming with Clojure - Simple Concurrency on the JVM.(Tim Berglund, Matthew McCullough).[193650202X].pdf [2010] ...

Global site tag (gtag.js) - Google Analytics