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

clojure基础入门(一)

欢迎进入clojure的世界。  ? 变量 Clojure的变量可以def关键字来声明:  ? clojure数据类型是弱类型,对应java的object,然后通过变量名直接调用。...函数 clojure以函数为第一类对象,其小括号后面第一个元素被Clojure解释器当成一个函数或,其后面的都会被当成参数。...加参数后,再次调用需要传入值,如果不传会报异常。 ? 下面函数内部使用a函数参数,如果想要拼接的话,可以在内部使用str函数,用它返回的值当成Get函数的参数:  ?...注意if是不是函数或,而是叫做special form(特殊形式),而且没有else,用空白或换行即表示else,不用显式return,clojure会将最后一个表示的值作为函数的返回值。...(macro)           Clojure几乎所有的函数和都是用Clojure代码实现的,关于后面再说。

1.5K30

clojure基础入门(一)

欢迎进入clojure的世界。  ? 变量 Clojure的变量可以def关键字来声明:  ? clojure数据类型是弱类型,对应java的object,然后通过变量名直接调用。...函数 clojure以函数为第一类对象,其小括号后面第一个元素被Clojure解释器当成一个函数或,其后面的都会被当成参数。...加参数后,再次调用需要传入值,如果不传会报异常。 ? 下面函数内部使用a函数参数,如果想要拼接的话,可以在内部使用str函数,用它返回的值当成Get函数的参数:  ?...注意if是不是函数或,而是叫做special form(特殊形式),而且没有else,用空白或换行即表示else,不用显式return,clojure会将最后一个表示的值作为函数的返回值。...(macro)           Clojure几乎所有的函数和都是用Clojure代码实现的,关于后面再说。

1.3K40
您找到你想要的搜索结果了吗?
是的
没有找到

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

2 3 } java.util.Set Nil 保留符号nilClojure程序中有特殊的意义:它的意思是“空”或“空值”。...如果一个值有可能是nil,你就需要考虑代码的这种特殊情况,以避免这个操作会产生一个java.lang.NullPointerException错误。 nil和Java的Null是相同的。...(char 97) -> \a Keywords 关键字是Clojure唯一特殊的的原始数据类型。主要目的是提供非常高效的存储和相等判断。...请阅读12章里里使用quote来实现复杂的元编程的详细讨论。 ---- 列表是以单向链接列表的形式来实现的,在这一点上有利有弊。...你要么显示地引用,要么使用ns形式的:use子句将其包含到你的命名空间里。请查阅第二章。 clojure.set/union 集合的并函数union接收任意数量的参数,每个参数都是一个集合。

2.2K10

几分钟内学习 Clojure

Clojure源码托管:github 在线练习编译环境: himera learnclojure.clj 示例: ; 分号作为注释的开始 ; Clojure 用一种把元素用括号括起来的像列表一样的方式来书写...,元素之间用空格隔开 ; clojure 解释器会把第一个元素当做是函数或者调用,其他的都作为参数 ; 下面这个函数用于设置当前的命名空间 (ns test) ; 更多基本的例子: ; str 函数会用它所有的参数创造一个字符串...; 从一个map检索一个值,可以直接把这个map当做函数调用(这个NB) (stringmap "a") ; => 1 (keymap :a) ; => 1 ; 关键字也可以当做函数来调用,从一个...2 3} 4) ; => nil (没有就返回nil) ; clojure.sets 命名空间包含更多的函数 ; 一些有用的形式 ;;;;;;;;;;;;;;;;; ; clojure的逻辑结构都是...:only [intersection]]) ; 使用reqire来导入一个模块 (require 'clojure.string) ; 使用/从一个模块调用函数 (clojure.string

1.6K40

Clojure与LispClojure与Lisp

但是没有改变lisp "代码也是数据" 的哲学. Clojure 语言直觉和观感上比历史上的lisp更易于阅读....2 函数也是一种数据类型 Lisp语言中,函数与整数或字符串一样,也属于数据类型的一种。它有自己的字面表示形式(literal representation),能够储存在变量,也能当作参数传递。...在读取期运行代码,使得用户可以重新调整(reprogram)Lisp的语法; 在编译期运行代码,则是Lisp的工作基础; 在运行期编译代码,使得Lisp可以Emacs这样的程序,充当扩展语言(extension...最常用的做法就是使用。 术语""Lisp语言中,与其他语言中的意思不一样。Lisp无所不包,它既可能是某样表达式的缩略形式,也可能是一种新语言的编译器。...直接调用Java方法,不去发明一套新的调用语法,努力规避Java语言中繁琐的地方(doto,箭头等等)。

1.8K30

Clojure 学习入门(11)—— macro

clojure macro在运行之前机械展开,定义相当于给语言增加新特性,写的*原则*:  能写成函数就不要用(因为写没有写函数简单直观,容易写错,需要先在 REPL 测试一番) ...只有不得不用时才用(性能要求高时比函数调用快,或者需要“代码数据”相互转换)  精心设计的调用比函数调用更 DSL(如实现控制结构、传递 Java方法)  与函数 ;; 正确写法 (defmacro...10 (+ 5 2)) (println (macroexpand-1 '(op 5 + 2 * 10))) ;; (* 10 (+ 5 2)) (println (clojure.walk...;; 2 (println (macroexpand-1 '(op2 5 + 2 * 10))) ;; 2 (println (clojure.walk...with-mongo 是定义的函数,后面传递的是参数,使用 ~' 修饰直接翻译过去,即字符串传字符串,:dict 键值也传键值 with-dict 传递多个参数给body,其中 dbname tbname

96520

Clojure Web 开发-- Ring 使用指南

Clojure 众多的 Web 框架,Ring 以其简单统一的 HTTP 抽象模型脱颖而出。...Compojure 里面使用了大量来简化路由的定义,像上面例子的GET、not-found等。...使用 GET 等这类定义 handler 时,会调用wrap-route-matches 来包装真正的处理逻辑,逻辑如下: (defn- wrap-route-matches [handler method...一个 App 的 middleware 调用顺序非常重要,因为不同的 middleware 之间 request map 与 response map 是相互依赖的,所以定义 middleware...Ring 与其说是一个框架,不如说是由各个短小精悍的函数组成的 lib,充分展示了 Clojure 语言的威力,通过函数的组合定义出一套完整的 HTTP 抽象机制,通过来实现“路由”特定领域语言,极大简化了路由的定义

75510

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

ASM 生成可运行在 JVM 的 bytecode。...交互 defrecord、deftype生成同名的类,proxy、reify生成匿名的类 需要明确一点,只有 AOT 编译时,Clojure 才会在本地生成 .class 文件,其他情况下生成的类均在内存...我们知道 Clojure 里面很多“函数”其实是用实现的,在编译时会进行展开,生成新代码,上面代码的ns、defn都是,展开后( Cider + Emacs 开发环境下,C-c M-m)可得...源码,只有 RT.java 的 makeClassLoader 函数 里面有new DynamicClassLoader语句,继续通过 Intellj 的 Find Usages 发现有如下三处调用...另外,JVM 7 增加了 invokedynamic 指令,可以让运行在 JVM 上的动态语言通过实现一个 CallSite (可以认为是函数调用)的 MethodHandle 函数来帮助编译器找到正确的实现

68820

Clojure 开发那些事

除了最基本的圆括号()外,方括号[]与花括号{} Clojure 用的也比其他 Lisp 方言中多。...《The Joy of Clojure》一书中有简单介绍,不过我觉得初学者可以完全不用去关心实现的细节,遇到性能问题时考虑去优化。...这也就意味我们或多或少需要了解这些宿主语言,比如 Clojure 里面没有提供直接操作文件系统、网络的类库,而是采用间接的方法去调用其宿主语言的相应类库。...Emacs + Cider 的组合相比 Intellj + Cursive 最大的优势就是对的支持,Cider 提供了对展开的快捷键,但在 Cursive 我没找到,不过也是比较高级的功能,初学者应用用不到...nrepl Clojure 的 REPL 可以连接到远程服务器上的进程,直接对进程的函数或变量进行修改,这是非常便利的,对于很多运行时的错误可以采用这种方式解决,Emacs 与 Intellj 里面都提供了连接远程

1.5K20

使用 ClojureScript 开发浏览器插件的过程与收获

对于 Clojure,我目前 sf 上有一套视频课程,供参考。 为了方便大家使用 cljs 开发插件,我整理了一份模板,供大家参考。... dev 过程,推荐设置 cljsbuild 的 optimizations 为 none,以便得到最快的编译速度; release 过程,可以将其设置为 advanced,来压缩、优化 js...Clojure,一般需要单独把定义一个文件里面,然后 cljs 里面用(:require-macros [my.macros :as my]) 这样的方式去引用,而且定义的文件名后缀必须是 clj...由于编译与 cljs 编程不同的时期,所以如果写错了,就需要把 repl 杀掉重启来把新的 feed 给 cljs,这点也比较痛苦,因为 repl 的启动速度实在是有些慢。...这一点 Clojure 里面虽然也存在,但是 Clojure 里面一般 repl 开了就不关了,直到电脑重启。

71330

一名Clojurian的Emacs配置

另外,为了更好地emacs编写Clojure,还需要cider-mode和clojure-mode的支持,这时候就不得不编辑init.el文件,本着KISS (keep it simple, stupid...简单点说,就是防止package-initialize之后重复加载包,因为可能会影响性能。 模块化 如果把什么东西都揉到init.el文件,这个文件一定会很快变得臃肿不堪。...emacs按下c-h i获取主话题(topic)的菜单,然后点击Elisp进入它的操作指南。重点查看Evaluation和Byte Compilation两个章节。...当你正在编译文件的时候,包就会原地展开,然后被eval-when-compile加载进内存并被编译成字节码,供后续解析器执行。...配置完毕后,使用(provide 'init-clojure)将模块以这样的名字暴露给其它客户端调用

2.7K20

Clojure 学习入门(7)—— 连接mysql

Clojure的contrib包实现了对现有JDBC的封装,wiki上有连接,该页面上包含了对不同的数据库的连接方法和基本的操作,但是这个页面上没有提供足够的信息,足够一个初学者能够使用Clojure...其次,和MySQL的操作,我们需要两个库,一个是clojure.contrib,另外一个是mysql-connector-java-xxx.jar。...接着,需要使用sql库的地方要导入这些库 ns中加载如下内容:(:use [clojure.contrib.sql :as sql :only ()]),这样本文件中就可以直接使用sql作为前缀...示例 创建表 fruit,并插入两条记录,然后条件查询和全部查询  1) project.clj ,添加sql依赖: (defproject myClojure "0.1.0-SNAPSHOT"...注:所有的sql操作都需要在with-connection下包裹着 参考推荐: Clojure SQL 基础 Clojure 连接mysql Connecting Clojure and MySQL

1.1K20

(cljsrun-at (->JSVM :browser) 语言基础)

由于宿主环境的不同,因此只能与宿主环境无关的Clojure代码可以JVM和JSVM间共享,并且cljs也未能完全实现clj的所有语言特性,更何况由于JSVM是单线程因此根本就不需要cljSTM等特性呢...|:=$&] 末尾字符不能是: 以:为首字符则解释为Keyword 命名空间  cljs每个symbol无论是函数还是绑定,都隶属于某个具体的命名空间之下,因此每个.cljs的首行一般为命名空间的声明...docstrings就是Document String,用于描述函数、功能。...return dividend - divisor * Math.trunc(dividend/divisor) }  至于次方,开方和对数等则要调用JSMath所提供的方法了!...; 调用JS函数,以下两种形式是等价的。但注意第二种,第一个参数将作为函数的上下文,和python的方法相似。

2.9K70
领券