Clojure:基本术语的定义

时间:2017-01-17 12:04:22

标签: clojure terminology

在Clojure上下文中,有些人将术语 form 定义为“任何有效代码”,有些则将其定义为“任何返回值的有效代码。”因此,数字1729和字符串Hello!是一个表单。同样地,(fn不是表格。是一个未定义的符号,比如my-val,一个表单?

表达式和表单之间有什么区别?

表达式和函数之间有什么区别?

2 个答案:

答案 0 :(得分:2)

Are Lisp forms and Lisp expressions same thing?

对这个问题有一些很好的答案

要考虑的关键是生命周期中有不同的点。我们从文本"(+ 1 2)"开始,然后read进入Clojure数据(包含符号和两个数字的列表)。通常在Lisps中,“表达”用于表示前者,“形式”用于表示后者。在实践中,我没有发现人们完全符合这种用法,并且经常同时使用这两个术语。

如果您将“表单”表示“可以评估的内容”,则1729"Hello!"或符号my-val都是表单。当评估my-val时,它将在当前命名空间中解析,也许解析为可调用的函数实例。只有在可以调用它们的评估时,函数才真正重要。

另一个有趣的方面是宏,它允许您创建新语法。请注意,宏扩展在读取后发生,这意味着虽然您可以创建新语法,但它仍然必须遵循编码到读者中的一些基本期望(即调用遵循模式{{1} })。请注意,宏可以处理读取但未评估的表单(数据,而不是文本),并且必须生成新表单。

答案 1 :(得分:0)

  

表达式和表单之间有什么区别?

在我看来,在Clojure的上下文中(fn)是编译器处理的东西。有些表单是有效的表达式,而其他表单是“特殊”表单(即宏)。

  

表达式和函数之间有什么区别?

任何函数都是表达式。

  

是一个未定义的符号,比如my-val,一个表单吗?

我想说它是一个有效的表达式(因此形式),它会产生编译时异常。

  

同样$("#myDiv").find("*").prop('disabled', true); 不是表格

好像你指的是某个来源,宣布这个来源,你能提供一个链接吗?