在Clojure上下文中,有些人将术语 form 定义为“任何有效代码”,有些则将其定义为“任何返回值的有效代码。”因此,数字1729
和字符串Hello!
是一个表单。同样地,(fn
不是表格。是一个未定义的符号,比如my-val
,一个表单?
表达式和表单之间有什么区别?
表达式和函数之间有什么区别?
答案 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);
不是表格
好像你指的是某个来源,宣布这个来源,你能提供一个链接吗?