Programming Clojure笔记之一——入门

  1. Clojure是一个基于JVM的动态语言,支持函数式编程。
  2. https://clojure.org/下载最新版本,获得一个jar文件如clojure-1.8.jar。
  3. 直接运行java -jar clojure-1.8.jar开启REPL。
  4. 如果要运行clojure程序文件,如hello.clj,直接运行java -jar clojure-1.8.jar hello.clj。或者在repl中加载,如下:(load-file "hello.clj")
  5. 定义函数
    • (defn hello [name] (str "Hello, " name))
    • 输出#’user/hello
    • defn定义了一个函数。
    • hello是这个函数的名称。
    • hello函数接受一个参数name。
    • str是一个函数调用,把由任意参数组成的列表连接成一个字符串。
    • defn,hello,name和str都是symbols,代表了它们各自涉及事物的名称。
    • #’前缀表示这个函数是用一个Clojure变量来保存的。
  6. 调用函数(hello "caowentao")输出”Hello, caowentao”
  7. 特殊变量
    • *1,*2,*3存储了最近三次求值的结果
    • *e存储了最后一个异常
    • pst函数获得详细的堆栈跟踪
  8. 共享状态
    • #{}是空集合的字面表示法
    • (conj #{} "Stu")向集合中添加元素
    • (atom #{})创建atom引用类型对集合保持跟踪
    • (def visitors (atom #{}))命名一个atom类型的引用
    • 使用deref或者@提取引用内部的值。
  9. 引入名字空间
    • (require 'examples.introduction),单引号表示对库名的引用。
    • 使用名字空间的内容(take 10 examples.introduction/fibs)
    • 使用refer将名字空间的所有内容映射到当前名字空间(refer 'examples.introduction),然后直接使用fibs
    • 也可以使用use将两个步骤合并为一(use 'examples.introduction)
    • :reload标记用来强制重新加载一个程序库(use :reload 'examples.introduction)
  10. 查找文档
    • (doc str)
    • (find-doc "reduce")
  11. 查看函数源码
    • 使用repl库的source函数查阅某个Clojure函数源码
    • (use 'clojure.repl)
    • (source identity)
  12. 使用Java的反射API
    (ancestors (class [1 2 3]))

你可能感兴趣的:(函数式编程,clojure)