`
clojurer
  • 浏览: 10701 次
  • 性别: Icon_minigender_2
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

clojure重复操作宏

阅读更多
当同样的操作连续操作n次时,在命令式语言里是通过循环来控制连续操作的次数的,
譬如
List data = new ArrayList();
for(String s : {"aa", "b", ...} ){
  data.add(s)
}

同类型的操作共享一个模型,都是重复墨重操作,在clojure里能把这些共同的模型抽象为macro,
在编译期进行宏扩展,从来形成一种公共模式,减少代码量。

其实现都是:
一个基本情况,通常是一次调用, 进行简单处理
多次调用, 对自己进行递归调用。
在core中这种宏有4个,
1: .. 连续调用方法,像jQuery里面的那种延续风格代码
   (.. System getProperties (get "Path"))
2:-> 把第一个参数作为表达式的第一个参数,前一个表达式的结果作为下一个表达式的结果
   (-> [1 2 3] pop pop)
3: ->> 把第一个参数插入到表达式的最后一个参数  
  (->> [] (cons 1) (cons 2))
4: doto 和->差不多,不过并不使用表达式的放回值作为下个表达式的参数,适用于具有操作有负效应的操作
(doto (java.util.HashMap.) (.put "1" "dd") (.put "2" "ff"))


使用返回值的延续操作和不使用返回值的延续操作实现上是不同,使用放回结果的要用返回值的替换先前的,
而不使用的可以直接通过map操作把多个操作映射到相同的对象上的。
0
0
分享到:
评论

相关推荐

    来源clojure-toolbox.com___下载.zip

    6. **环形宏(宏)**:Clojure的宏系统允许在编译时生成代码,是其Lisp背景的一个重要特性。 7. **数据结构**:Clojure提供了丰富的数据结构,如vector、list、map和set,它们都具有高效的操作和查询能力。 8. **...

    clojure-data-science:关于使用 Clojure 进行数据科学的演示

    2. 语法糖:Clojure的宏(macros)和特殊形式(special forms)使得代码可以更加简洁。例如,`for`表达式允许迭代和构建新的集合,而`let`则提供了局部变量的便利。 3. 动态性:Clojure支持动态类型,这在数据探索...

    clojure-shopshop:一日研讨会的基本Clojure培训材料

    【描述】:“clojure-shopshop”的目标是使参与者能够熟练掌握Clojure的基本用法,包括其函数式编程特性、数据结构、宏系统以及与其他Java库的交互。此培训材料旨在为一整天的研讨会提供详细的学习路径,确保学习者...

    clojure-labs

    这些内容可能涵盖了Clojure的基础语法、数据结构、函数式编程概念、宏(macros)、闭包(closures)、原子(atoms)、引用(refs)和队列(channels)等核心特性。此外,项目可能还包含了Clojure与其他Java库或服务...

    clojure-through-code:Clojure代码示例,用于解释语言的核心方面-通常在REPL中进行评估

    Clojure的Lisp特性体现在其强大的宏系统,宏可以在编译时生成代码,实现元编程。通过宏,我们可以创建新的语法糖,使代码更简洁,更贴近自然语言。 6. **并行与并发** 由于Clojure运行在JVM上,它可以利用多核...

    clj-odbp:OrientDB二进制协议的Clojure驱动程序

    5. **API设计** - 驱动通常提供了一套Clojure友好的API,使得Clojure程序员能以Clojure的方式进行数据库操作,如使用Clojure的宏、函数和数据结构。 6. **测试与调试** - clj-odbp项目可能包含了大量的测试用例,以...

    lacinia:纯Clojure中的GraphQL实现

    2. **Clojure语言特性**:熟悉Clojure的语法、宏系统、数据结构、函数式编程原则以及与其他JVM语言的交互方式。 3. **Lacinia的功能**:学习Lacinia如何处理GraphQL查询,如何映射到Clojure的数据结构,以及它如何...

    无涯教程(LearnFk)-LISP教程离线版.pdf

    用户可以在Windows的“开始”菜单中找到解释器的快捷方式,通过CLISP窗口运行或编译*.lisp或*.lsp文件。 LISP程序的基本结构是S-表达式,它是以括号表示的列表形式出现的表达式,可以包含原子、列表和字符串。S-...

    liquid:Clojure文本编辑器,用于编辑Clojure代码和降价。 完全由Clomacre撰写,灵感来自Emacs和Vim

    它具备智能感知、自动完成、语法高亮等特性,使编写Clojure代码变得轻松快捷。同时,编辑器内置了对Clojure REPL(Read-Eval-Print Loop)的支持,允许开发者实时测试代码,快速调试,从而极大地提高了开发效率。 ...

    puertorico:Clojure中的波多黎各棋盘游戏

    7. **宏(Macros)**:如果游戏中有大量重复的代码模式,Clojure的宏可以用来生成代码,提高代码的可读性和可维护性。 通过这个项目,开发者不仅可以学习到波多黎各棋盘游戏的策略,还可以深入理解Clojure和...

    ejc-sql:Emacs SQL客户端使用Clojure JDBC

    6. **宏录制与回放**:可以录制一系列的SQL操作,方便日后重复执行或分享给其他用户。 7. **数据库对象浏览**:查看数据库中的表、视图、索引等对象,并能获取其结构信息。 ejc-sql的源代码位于`ejc-sql-master`...

    squeedo:基于clojure core.async的Amazon SQS消息处理

    "sqs"标签代表了Amazon SQS,而"ClojureClojure"可能是对Clojure语言的重复提及,强调了项目的技术栈。 在【压缩包子文件的文件名称列表】"squeedo-master"中,"master"通常指的是项目的主分支,这可能包含项目的源...

    fdat.cljc:Clojure进程和方言之间的函数序列化

    4. **Clojure的`fn`宏**:Clojure提供了`fn`宏来定义匿名函数,这些函数也可以被序列化。通过将函数定义转换为可以嵌入到其他数据结构中的形式,`fdat.cljc` 可能包含了处理这种转换的逻辑。 5. **Java Interop**:...

    指南:Clojure的文档指南和教程。 各种作者

    目的是在指南之间重复很少的情况下制作高质量的技术文档,并最终将这些文档托管在doc.clojure.org中。 什么不在这里: 备忘单。 这些可以在上找到,或者在上找到工具提示。 还有一个非正式的可供下载和提供。 API...

    metaclj:通过环境和特殊形式的语法引用对Clojure进行分阶段编译

    这种分阶段编译(staging)的概念源自于函数式编程中的宏系统,如Scheme的`quasiquote`和`unquote`。在Clojure中,`quote`和`unquote`(用作`~`)可以用来构造代码表达式,但它们并不支持复杂的编译时计算。`metaclj...

    hicosql:高度可配置SQL

    hicosql可能是一个库或框架,旨在为Clojure编程语言提供更灵活的SQL操作能力,允许开发者根据特定需求定制SQL语句。 **描述分析:** 由于描述只重复了标题,我们推断hicosql的核心特性就是其高度可配置性。这可能...

    hallinto:我的个人管理多合一应用程序

    Clojure的宏系统允许开发者创建元编程,简化常见模式,而其强大的数据结构如映射和向量,提供了处理和操作数据的强大工具。 从文件名"hallinto-main"来看,这可能是项目的主模块或入口点,包含了程序的核心逻辑和...

    systems-toolbox-kafka:Kafka系统的生产者和消费者组件-工具箱

    在IT行业中,Apache Kafka是一个广泛使用的...开发者可以研究`systems-toolbox-kafka-master`压缩包中的源代码,了解如何在Clojure中高效地操作Kafka,同时学习如何构建自己的Kafka工具箱,以适应不同的数据处理需求。

    datofu:有一个:dbfn

    标签中的 "clojure utilities" 暗示 datofu 是一组通用的 Clojure 工具,可能包括其他辅助函数或宏,帮助开发者简化常见任务。"ClojureClojure" 这个标签可能是重复的,或者表明该库是纯 Clojure 实现,没有依赖于...

    optimize:本地搜索优化方法

    3. **惰性序列优化**:Clojure中的序列操作通常是惰性的,这在处理大量数据时很有用,但也可能导致不必要的计算。通过合理地使用` dorun`或`doall`,可以在需要时强制计算整个序列。 4. **类型提示**:使用类型提示...

Global site tag (gtag.js) - Google Analytics