clojure表单是数据还是类型?
我开始学习clojure。主要来自Java和一些脚本语言,作为clojure(我认为是所有函数式语言)数据部分的代码并不那么清晰 从书的第一页开始,我看到了表格。我认为它主要与数据相关,比如clojure表单是数据还是类型?,clojure,Clojure,我开始学习clojure。主要来自Java和一些脚本语言,作为clojure(我认为是所有函数式语言)数据部分的代码并不那么清晰 从书的第一页开始,我看到了表格。我认为它主要与数据相关,比如{12}。但在其他一些地方,我看到Boolean标记为form 现在,我假设false是类型Boolean的一种形式,但是我没有看到type被多次提及,所以我感到困惑 有人能帮我理解表单的概念吗?还有人能帮我理解作为语言数据部分的代码吗?Clojure有表单,因为它是一种语言 Clojure表单是作为表单的
{12}
。但在其他一些地方,我看到Boolean
标记为form
现在,我假设false
是类型Boolean
的一种形式,但是我没有看到type
被多次提及,所以我感到困惑
有人能帮我理解表单的概念吗?还有人能帮我理解作为语言数据部分的代码吗?Clojure有表单,因为它是一种语言
- Clojure表单是作为表单的一部分呈现的元素或数据结构 节目
- Clojure和其他Lisp都有这种形式李>
- 除了Lisps之外,大多数编程语言都没有:结构 用于编写程序结构的数据与本机数据完全不同 结构
- 函数式语言也不例外。例如,看看 家庭
- 使用本机数据结构表示程序的回报 结构就是您可以编写几乎可以操纵表单的程序 就像你能写任何其他类型的一样容易
- 这样的程序称为
一般来说,用Lisps回答您的问题 clojure表单是数据还是类型 -资料 Clojure表单是一段被视为数据的代码。 Clojure形式具有化学性质。元素是这样的
- 编号(
,42
,3.1416
)22/7
- 字符串(
)“1,2,扣上我的鞋。”
- 符号(
,a5
),无论它们表示什么李>freds white Doots
- 表达式(
,(+11)
)(reduce*(范围1n))
- 参数列表(
,[f coll]
)[[forename name:as name]]
- 表达式列表李>
- 参数列表的向量(以及一般的绑定形式)李>
- (关联绑定形式的映射) (暂时把这些留下)
def
和defn
表单。这些可能有很多层
是一种特殊形式。它有自己的评估规则def
看起来像一个特殊的表单,但它不是defn
- 以形式作为论据
- 返回表单结果
拼图的最后一部分是Clojure提供了一种特殊的函数模式,称为宏
- 将其参数作为形式进行操作
- 将调用表单转换为表单结果李>
defn
是一个宏,它将fn
表单包装在def
表单中。一个便宜而令人愉快的类比是
(defmacro my-defn [name & args-and-body]
(list 'def name (cons 'fn (cons name args-and-body))))
真正的defn
要复杂得多。但这一个足以应付
(my-defn twice [n] (* 2 n))
(twice 3)
;6
我们可以通过这样做来了解情况
(macroexpand '(my-defn twice [n] (* 2 n)))
;(def twice (fn twice [n] (* 2 n)))
我们甚至可以定义递归函数:
(my-defn fact [n]
(if (pos? n)
(* n (fact (dec n)))
1))
(map fact (range 1 5))
;(1 2 6 24)
- 以上内容适用于任何Lisp,而不仅仅是Clojure
- 其他Lisp仅使用列表构造表单
- 没有其他重要语言将代码作为数据属性
- 函数式语言也不例外:ML系列(ML、OCaml、, Haskell,F#,…)有相当传统的语法