首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

几分钟内学习 Clojure

Clojure源码托管在:github 在线练习编译环境: himera learnclojure.clj 示例: ; 分号作为注释的开始 ; Clojure 用一种把元素用括号括起来的像列表一样的方式来书写...,元素之间用空格隔开 ; clojure 解释器会把第一个元素当做是函数或者宏调用,其他的都作为参数 ; 下面这个函数用于设置当前的命名空间 (ns test) ; 更多基本的例子: ; str 函数会用它所有的参数创造一个字符串...书写一个列表形如(1 2 3)一样简单, 但是我们不得不把它“引”(前面加个单引号)起来 ;这样就能防止解释器把它当做一个函数来解析 ;另外,(list 1 2 3) 和 '(1 2 3) 等价 ;列表和向量都是集合...(if false "a") ; => nil ; 使用let 来创建临时绑定 (let [a 1 b 2] (> a b)) ; => false ; 执行多条语句,返回最后一条语句 (do...;; ; java 拥有一个庞大的各种用途的标准库,你一定迫不及待想学习如何在clojure中使用这些库 ; 使用import类引入java模块(这个还好没变化) (import java.util.Date

1.7K40

Clojure 开发那些事

作为万里长城的第一步,这篇文章首先如何入门 Clojure 语法,紧接着介绍 Clojure 开发环境搭建,然后介绍使用第三方库时的一些注意点,最后介绍一下常见的测试方法。...语言非常详细的介绍 https://clojuredocs.org/,可以方便查看函数的方法 数据不可变 括号问题适应后,另一个比较挑战的是数据的不可变性,这融合在 Clojure 语言的设计之中,表象就是没有赋值语句了...《The Joy of Clojure》一书中有简单介绍,不过我觉得初学者可以完全不用去关心实现的细节,在遇到性能问题时在考虑去优化。...使用比较简单,通过 Intellj 插件管理器安装后即可使用,第一次使用时需要设置下快捷键类型 Emacs + Cider 作为一门 Lisp 方言,怎么能没有一个好的 Emacs mode 呢?...大部分都是一些简单的语法介绍或者概念阐述,我希望能够弥补这一块,把自己使用 Clojure 开发的经历分享出来,供以后的同学参考。

1.6K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Clojure 学习入门(18)—— 数据类型

    如何表示和处理数据 Clojure是一种动态类型语言,这意味着你在程序中永远不需要明确定义符号、函数、或者参数的数据类型。但是,所有的值仍然有一个类型。...字符串时是字符串,数字是数字,列表是列表,等等。如果你尝试执行一个类型不支持的操作,将会在运行时产生错误。写代码时避免这种事情,是程序员的责任。...:key val} java.util.Map Set 花括号前缀井号 #{ 1 2 3 } java.util.Set Nil 保留符号nil在Clojure程序中有特殊的意义:它的意思是“空”或...5) -> false 打印与换行打印 字符串打印函数 (print & println) 接受任意数量参数,打印到标准系统输出(如果不是字符串则转换成字符串)。println 在尾部追加一个换行符。...如果只是作为数据结构而不是可执行代码来使用列表,只需要给列表加一个单引号作为前缀即可。这告诉Clojure将其作为数据结构来对待,而不是将其当作Clojure形式对其求值。

    2.3K10

    Java扩展Nginx之一:你好,nginx-clojure

    模块,它支持使用Java对Nginx进行功能扩展: 至此,聪明的您应该猜到《Java扩展Nginx》系列的核心内容了:学习nginx-clojure模块,从入门到精通,解锁Clojure的强大能力,通过丰富的实战与大家一起掌握用...Ring 在 Clojure 中是一个构建 Web 应用的底层接口和库....,解压,得到名为nginx-clojure-0.5.2的文件夹,里面的内容如下: 接下来根据您的操作系统对可执行文件做重命名,我这边是macOS,所以把nginx-macosx重命名为nginx,如果是...启动nginx 启动命令很简单,在nginx-clojure-0.5.2目录下执行....,可以考虑用熟悉的java在nginx上实现 至此,《Java扩展Nginx》的开篇就完成了,简简单单的实战,让我们看到了java在nginx领域大显神通的可能,接下来文章,会继续深入学习nginx-clojure

    63120

    Java扩展Nginx之六:两大filter

    ,然后配置在不同的location中使用 header filter必须实现NginxJavaHeaderFilter接口,功能代码写在doFilter方法中 doFilter方法如果返回PHASE_DONE...,稍后验证header filter功能的时候会用到它 先用postman请求/java接口,看看没有使用header filter之前的response header,如下图: 接下来新增一个location...Body Filter的第一个场景:字符串body(string faced Java body filter) Body Filter的作用很明确:修改原响应body的值,然后返回给客户端 如果响应的...接下来的实战再次用到之前的HelloHandler.java作为content handler,因为它返回的body是字符串 先增加一个location配置,body_filter_type和body_filter_name...body filter) 当响应body是二进制流的时候,如果想对响应body做读写操作,nginx-clojure的建议是在body filter中执行,这种body filter是专门用在二进制流body

    56130

    【译】深入 Roam 数据结构 —— 为什么 Roam 远不只是一个笔记应用

    当一个模式变量在多个地方使用时,查询引擎要求它在每个地方都绑定为相同的值。因此,这个查询只会找到具有 uid r61dfi2ZH的块的字符串。...Predicates 断言 断言子句可以过滤结果集,只包括断言返回 true 的结果。在 Datalog 中,你可以使用任何 Clojure 函数或 Java 方法作为谓词函数。...根据我的经验,在 Roam JavaScript 的实现中,Java 函数是不可用的,只有少数 Clojure 函数可以使用。...换句话说,你可以在 (ancestor ?child ?parent) 中使用?parent和?child作为输入和输出。如果你既不提供值,你将得到数据库中所有可能的组合。...你可以在下面的评论中联系我,或者在 Twitter 上@zsviczian。 另外,我很想了解你是如何使用从这篇文章中学到的知识,以及如何使用 SmartBlock 的。请分享你的想法和成果。谢谢你!

    1.5K10

    Clojure 运行原理之字节码生成篇

    但仔细想想会有如下问题: 在 REPL 里面,可以动态添加、修改函数,如果一个命名空间相当于一个类,那么这个类会被反复加载 由于函数和字符串一样是一等成员,这意味这函数既可以作为参数、也可以作为返回值,...如果函数作为类的方法,是无法实现的 上述问题 2 就要求必须将函数编译成一个类。...___36())).invoke(); Object var10002; // 如果当前的命名空间不是 clojure.core 那么会在一个 LockingTransaction 里执行...源码,只有在 RT.java 的 makeClassLoader 函数 里面有new DynamicClassLoader语句,继续通过 Intellj 的 Find Usages 发现有如下三处调用...总结 Clojure 作为一门 host 在 JVM 上的语言,其独特的实现方式让其拥动态的运行时的同时,方便与 Java 进行交互。

    74320

    clojure基础入门(一)

    阅读目录: 概述 变量 运算符 流程控制 总结 概述 clojure是一种运行在JVM上的Lisp方言,属于函数式编程范式,它和java可以方便的互相调用,这样开发的程序可以很好的结合java和clojure...加参数后,再次调用需要传入值,如果不传会报异常。 ? 下面在函数内部使用a函数参数,如果想要拼接的话,可以在内部使用str函数,用它返回的值当成Get函数的参数:  ?...这里有三层嵌套,首先(= age 18)来判断返回是否等于18,作为if判断该返回哪个字符串的依据,再根据if确定的字符串作为函数的返回值。...注意if是不是函数或宏,而是叫做special form(特殊形式),而且没有else,用空白或换行即表示else,不用显式return,clojure会将最后一个表示的值作为函数的返回值。...clojure中(lisp习惯)有个规定:对于判断功能的函数,函数名后面都有一个“?”号。所以只要看到后面带问号的函数名,就知道这一定是一个判断语句。 user=> (fn?

    1.5K30

    不学函数式设计的3大损失

    比如图7中上面那几行代码中第9行map-indexed 就是一个高阶函数,它接受一个函数作为参数。这个函数应用到集合的每个元素上,同时提供元素的索引。...图7中左侧的这张图,就是我们从影院订票系统的Clojure版的main函数作为起点,绘制出的数据是如何在Clojure代码各个函数间流淌的图。...注意,在Clojure中有个约定,当函数有副作用时,会在函数名末尾加个叹号。...我知道ArrayList是线程不安全的,那Java能用线程安全的Vector实现相似的无锁机制吗?”Java如果想实现一个无锁的原子性更新ArrayList,面临的最大挑战,是原子性操作局限。...快速上手Clojure看到这里,你是不是已经跃跃欲试,想快速上手Clojure了呢?不要担心Clojure的语法,它其实极其精简。我把80%的语法浓缩成了下面短短的三行。

    43754

    Java扩展Nginx之二:编译nginx-clojure源码

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 为什么要编译nginx-clojure源码 作为《Java...,这是个编译好的nginx可执行文件,开箱即用,当时我们还用命令查看过nginx版本是1.18.0,如下图: 直接使用nginx-clojure官方编译好的安装包,虽然好处是简单省事儿,但同样带来一些致命问题...如果说问题1可以通过等待来解决,那么,假设咱们的nginx不仅需要nginx-clojure能力,还需要集成其他第三方或者自研模块,那又该如何呢?...所以,nginx-clojure提供的安装包,只能作为一个学习工具,帮助咱们熟悉nginx-clojure技术框架,或者在开发的时候用到,至于生产环境就不适合了 此刻,经验丰富的您一定看出了欣宸的套路:...,价格便宜,重装系统也很简单,如下图: 为了省事儿,全程使用root账号 远程连接腾讯云服务的客户端工具是FinalShell-3.9.2.2 安装jdk nginx-clojure的源码中有java

    37320

    Clojure与LispClojure与Lisp

    Clojure 是一种运行在 Java™ 平台上的 Lisp 方言,它的出现彻底改变了这一现状。如今,在任何具备 Java 虚拟机的地方,都可以利用 Lisp 的强大功能。...如果你创造了一种新语言,其中有car、cdr、cons、quote、cond、atom、eq这样的功能,还有一种把函数写成列表的表示方法,那么在它们的基础上,你完全可以推导出Lisp语言的所有其他部分。...如今,在任何具备 Java 虚拟机的地方,都可以使用 Lisp 的强大功能。 Clojure 是一种函数式编程语言 它囊括了函数式编程的所有精华: 避免了不稳定状态、递归、更高阶的函数等。...Clojure的设计原则 (1)简单: 鼓励纯函数,极简的语法(少数special form),个人也认为clojure不能算是多范式的语言(有部分OO特性),为了支持多范式引入的复杂度,我们在C++和...Clojure是这样的有潜力、接地气,那么如果你要选择一门新语言来玩玩,不选它选什么?

    1.9K30

    windows搭建clojure开发环境

    文章目录 1、单独运行的clojure 2、安装leiningen 安装方法1: 安装方法2: 3、使用Intellij Idea作为开发IED 4、运行和打包lein项目 5、leiningen构建工具的...安装方法2: 点我进入下载页,或者直接点我下载下载一个.exe的windows可执行文件,安装时使用默认配置,不然可能缺少self-installs文件夹。...在cmd中执行lein repl即可进入clojure命令行,执行lein repl 或者可以直接在windows开始栏搜索安装的程序,点击打开。...(println (foo "Hello Clojure \n")) 通过lein run的方式也可以很方便的执行代码,但是如果要将我们的代码share出去,就需要生成一个jar文件了,我们使用lein..."} ;;依赖的格式类似:[group-id/project-name version] ;; classifier :它表示在相同版本下针对不同的环境或者jdk使用的jar,

    2.2K10

    Java的新未来:逐渐“Kotlin化”

    Java 提供的强类型安全性,以及作为一个结构良好的语言所带来的其他特性,使其成为大型项目中非常流行的语言 。通过使用 Java,我们很少会让事情变得难以收拾。...Java 的另外一个重要特点是作为多平台语言,它运行在自己的虚拟机上,这使其能够完美契合很多的组织。...它同时也是强类型语言,Java 的语法在某种程度上与 C++ 和 C 语言很相似,但它被认为是一个改进版本,因为使用 Java 编写代码要比使用 C 或 C++ 容易得多。...Clojure 是一种基于 LISP 的语言,其特点是简单和使用纯函数。在它的缺点中,值得一提的是动态类型(与 Groovy 相同),而且学习曲线更陡峭,因为它的语法与其他 JVM 语言完全不同。...switch 语句时,我们必须要使用一个变量,而且如果我们遗漏了一周中的某一天,代码也能编译通过。

    96120

    Java扩展Nginx之五:五大handler(系列最核心)

    :zq2599/blog_demos.git 该项目源码的仓库地址,ssh协议 这个git项目中有多个文件夹,本篇的源码在nginx-clojure-tutorials文件夹下的handler-demo...invoke方法中使用: Nginx Rewrite Handler(地址重定向) rewrite handler顾名思义,就是咱们常在nginx上配置的rewrite功能,在nginx-clojure...之后,nginx-clojure框架就会执行proxy_pass逻辑, // 如果返回的不是PHONE_DONE,nginx-clojure框架就把这个handler当做content...没错,从下图可见官方也是这么说的: - 如果您的环境中有注册中心,例如eureka或者nacos,您还可以取得后台服务列表,这样,不光是负载均衡,各种转发调度逻辑都可以在nginx上开发出来了 还有一点要注意的...,下图是刚才写的MyRewriteProxyPassHandler.java的源码,注意红框位置,是invoke方法的返回值,如果返回的不是PHASE_DONE,nginx-clojure框架就不再执行后面

    39450

    Java扩展Nginx之七:共享内存

    ,咱们来了解一个实用工具共享内存,正式开始之前先来看一个问题 在一台电脑上,nginx开启了多个worker,如下图,如果此时我们用了nginx-clojure,就相当于有了四个jvm进程,彼此相互独立...:在使用nginx-clojure进行java开发时,用共享内存在多个worker之间同步数据 本文由以下内容组成: 先在java内存中保存计数,放在多worker环境中运行,验证计数不准的问题确实存在...我很好奇的去探寻了一下该方法的实现,这是一段C代码,最后没看到CAS有关的循环,只看到一段最简单的累加,如下图: 很明显,上图的代码,在多进程同时执行时,是会出现数据覆盖的问题的,如此只有两种可能性了...(如果您看懂了此段代码的调用逻辑,还望您指点欣宸一二,谢谢啦) 编码完成,在nginx.conf上配置一个location,用SharedMapSaveCounter作为content handler:...:zq2599/blog_demos.git 该项目源码的仓库地址,ssh协议 这个git项目中有多个文件夹,本篇的源码在nginx-clojure-tutorials文件夹下的shared-map-demo

    87440

    实用的函数式编程

    那么, 你应该使用哪种函数式编程语言呢? 我最喜欢的是 Clojure. 因为 Clojure 极其简单. 它是 Lisp 的一个方言, Lisp 是一个十分简单和漂亮的语言....在这里, 来稍微展示一下: 在 Java 中的一个函数: f(x); 现在, 将它转换为 Lisp 的一个函数, 简单地将第一个括号移到左边即可: (f x)....此外, Clojure 基于 JVM, 它完全可以访问 Java 库, 和任何其他的 Java 框架和库. 它的互用性快速而便捷....我发现面向对象最有用的一个特性是, 在软件架构层面的动态多态性. Clojure 提供了对 Java 动态多态性的完全接入....故而, 在 Clojure 中, 所有的函数调用都是列表. 列表可以直接被代码操作. 所以, 一个程序也可以构造和执行其他程序. 最后说一句, 函数式编程十分重要. 你应该去学习它.

    1.1K20

    clojure基础入门(一)

    阅读目录: 概述 变量 运算符 流程控制 总结 概述 clojure是一种运行在JVM上的Lisp方言,属于函数式编程范式,它和java可以方便的互相调用,这样开发的程序可以很好的结合java和clojure...加参数后,再次调用需要传入值,如果不传会报异常。 ? 下面在函数内部使用a函数参数,如果想要拼接的话,可以在内部使用str函数,用它返回的值当成Get函数的参数:  ?...这里有三层嵌套,首先(= age 18)来判断返回是否等于18,作为if判断该返回哪个字符串的依据,再根据if确定的字符串作为函数的返回值。...注意if是不是函数或宏,而是叫做special form(特殊形式),而且没有else,用空白或换行即表示else,不用显式return,clojure会将最后一个表示的值作为函数的返回值。...clojure中(lisp习惯)有个规定:对于判断功能的函数,函数名后面都有一个“?”号。所以只要看到后面带问号的函数名,就知道这一定是一个判断语句。 user=> (fn?

    1.3K40

    Clojure文件操作和惰性序列

    读取和写入文件 数据一般都是存储在纯文本文件当中,存储的形式多种多样。本文,我会介绍如何在Clojure中读取和写入这些数据。 1....这里使用了(doall )方法,如果不用这个方法,在repl中求值的时候会表达式导致抛出Unhandled java.io.IOException Stream closed异常。...使用clojure.java.io/writer 我们在项目的根目录新建numbers.txt,内容是多行的数字对,如下: 1.3 2.7 10000 1 -1 1 我们需要把每行两个数字,和它们相加的结果写入到...rdr must implement java.io.BufferedReader. 可以确认line-seq返回一个惰性的字符串序列。...当我们通过repl求值with-open时,它并没有真的变现(take 2 (line-seq rdr)),而是在运行完try...finally之后,直接返回这个惰性序列作为结果。

    3.1K30

    如何在Ubuntu 14.04上部署Clojure Web应用程序

    介绍 人们对函数式编程的兴趣不断增加,更具体地说,是在Clojure中对Web进行编程。许多关于如何构建基本应用程序的教程经常忽略部署细节。...具体来说,我们将创建一个示例Clojure应用程序并将其打包以供制作使用,并使用Supervisor在服务器上设置Clojure应用程序环境以运行应用程序和Nginx向其提供请求。...没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。...如果您愿意,可以自己学习该教程,而不是克隆此存储库。 Clojure利用JVM来运行其代码,因此您需要编译项目来运行它。...第三步 - 配置Supervisor以运行Clojure应用程序 这有几个选项作为服务来管理应用程序。你在这里使用的选项叫做Supervisor ; 它比简单的脚本更容易管理,更通用。

    1.4K00

    Java扩展Nginx之四:远程调试

    nginx-clojure监听的远程debug端口,当浏览器请求触发了java代码的执行时,就会进入断点状态,停留在断点位置,可以看到堆栈和内存中的变量情况,以及单步执行: 关于工具 本篇使用的编码工具是...IntelliJ IDEA 2021.3.2 (Ultimate Edition) 关于代码 本篇直接使用《Java扩展Nginx之一:你好,nginx-clojure》中的工程和代码,这里简单回顾如下...,worker_processes的值等于1,所以只有一个java进程,它的远程调试端口是8401 配置完成后,启动nginx 用postman访问/java,确认可以响应成功,证明nginx和nginx-clojure...的ip地址,我这里IDEA和nginx在同一台电脑上,所以用localhost即可,红框2是端口号,对应nginx配置的jvm_options中的address=840#{pno}: 配置完成后,按照下图红框数字的顺序操作...,先在代码上打断点,然后执行远程连接,顺利的话会看到红框3中的连接成功提示: 至此,远程调试功能已经准备好,可以使用了 验证 在postman上再发一次请求,IDEA上立即进入断点状态,如下图: 如果想看堆栈中的代码

    77610
    领券