clojure 备忘

看了一上午的clojure(以前也看过),到中午的时候突然觉得时间有限(最近忙于写visitrank),不打算再继续下去。晚上又觉得忘记可惜,所以写一篇博客,权当以后给自己看。

早上在研究require,use的使用,在repl下,想交互试一下,需要在当前的namespace里面找到指定的ns,从而观察require和use的效果。为了解决这个问题,还是需要了解不少clojure知识。

步骤很简单,列出全部ns,然后filter即可。

一些Macro,在repl见面会看着这些:

#' : Var-quote (#'), #'x => (var x)

比如在命令行输入:(defn anfn [x] (x)),就会看到返回值: #'user/anfn

Vars provide a mechanism to refer to a mutable storage location that can be dynamically rebound (to a new storage location) on a per-thread basis.

匿名函数Macro:

#(...) 展开之后是 (fn [arg1 arg2 ...] (...))

比如等会儿要用到的匹配函数,#(re-matches #".*\.io$" %)  -》 (fn [x] (re-matches #".*\.io$" x))

有了这些知识就可以实现开始提到的功能了:

查找以io结尾的ns:

(filter #(re-matches #".*\.io$" %) (map str (all-ns)))

输出("clojure.java.io")。

查找包含string的ns:

(filter #(re-matches #".*string.*" %) (map str (all-ns)))

任务完成。

clojure的代码看起来像天书,规则其实非常简单,回顾我们书写的大部分代码(不管任何语言),其实都只是完成了简单的功能而已,clojure可以证明这一点。

你可能感兴趣的:(clojure 备忘)