📜  Clojure-基本语法(1)

📅  最后修改于: 2023-12-03 15:30:01.269000             🧑  作者: Mango

Clojure - 基本语法

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))