📅  最后修改于: 2023-12-03 15:30:01.269000             🧑  作者: Mango
Clojure是一种基于JVM的函数式编程语言,它拥有简洁优美的语法和强大的并发编程能力,逐渐成为函数式编程领域中的明星语言。本文将介绍Clojure中的基本语法。
Clojure中有丰富的数据类型,包括数值、字符串、集合、列表等。其中数值包括整数、浮点数和分数。字符串使用双引号括起来,例如:"hello, world"。Clojure中的集合有三种类型,分别是列表、向量和集合,列表使用小括号括起来,例如:(1 2 3),向量使用中括号括起来,例如:[1 2 3],集合使用大括号括起来,例如:#{1 2 3}。
;; 数值
1
3.14
1/2
;; 字符串
"hello, world"
;; 列表
(1 2 3)
;; 向量
[1 2 3]
;; 集合
#{1 2 3}
Clojure中的变量和函数都是使用def关键字进行定义的。变量和函数的命名规则与其他语言类似。
;; 定义变量
(def x 1)
;; 定义函数
(defn add [x y] (+ x y))
Clojure中的分支语句使用if关键字,循环语句使用loop/recur关键字。
;; 分支语句
(if (> x 10)
"x is greater than 10"
"x is less than or equal to 10")
;; 循环语句
(loop [i 0]
(if (< i 10)
(do
(println i)
(recur (inc i)))))
Clojure是一种函数式编程语言,因此它支持很多函数式编程技术。例如,Clojure中的函数可以作为参数传递给其他函数,又可以返回一个函数。
;; 函数作为参数
(defn apply-fn [f x]
(f x))
(apply-fn (fn [x] (* x x)) 3)
;; 返回函数
(defn plus [x]
(fn [y] (+ x y)))
(def add5 (plus 5))
(add5 3) ; 8
Clojure中的线程和并发编程使用以下几个关键字实现:future、promise、let、locking、ref,等等。
;; future
(def f (future (Thread/sleep 5000) (println "future done")))
(println "waiting...")
(deref f)
;; promise
(def p (promise))
(future (Thread/sleep 5000) (deliver p 3))
(deref p)
;; let
(let [x 1
y 2]
(+ x y))
;; locking
(def account (ref 0))
(dosync (alter account + 10))
;; ref
(def accounts (ref {:john 100 :mary 200}))
(dosync (alter accounts assoc :john 150))