Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Programming languages 是不是;“所有语言始终可用”;在Clojure的情况下保持?_Programming Languages_Clojure_Lisp_Common Lisp - Fatal编程技术网

Programming languages 是不是;“所有语言始终可用”;在Clojure的情况下保持?

Programming languages 是不是;“所有语言始终可用”;在Clojure的情况下保持?,programming-languages,clojure,lisp,common-lisp,Programming Languages,Clojure,Lisp,Common Lisp,保罗·格雷厄姆的第九点说 9。整个语言始终可用。 读取时、编译时和运行时之间没有真正的区别。您可以在读取时编译或运行代码,在编译时读取或运行代码,以及在运行时读取或编译代码 在读取时运行代码可以让用户重新编程Lisp的语法;在编译时运行代码是宏的基础;运行时编译是Lisp在Emacs等程序中用作扩展语言的基础;运行时读取使程序能够使用s表达式进行通信,这一概念最近被重新定义为XML 这最后一点对Clojure有效吗?它确实有效 (eval (read-string "(println \"Hel

保罗·格雷厄姆的第九点说

9。整个语言始终可用。

读取时、编译时和运行时之间没有真正的区别。您可以在读取时编译或运行代码,在编译时读取或运行代码,以及在运行时读取或编译代码

在读取时运行代码可以让用户重新编程Lisp的语法;在编译时运行代码是宏的基础;运行时编译是Lisp在Emacs等程序中用作扩展语言的基础;运行时读取使程序能够使用s表达式进行通信,这一概念最近被重新定义为XML

这最后一点对Clojure有效吗?

它确实有效

(eval (read-string "(println \"Hello World!!\")"))
Hello World!!
nil

就像emacs一样,您可以在Clojure中配置程序,我知道Clojure的一个项目是,它允许您将模板作为Clojure向量,以及在读取时执行的任意代码。

您可以在Clojure中自由混合运行时和编译时,尽管Common Lisp在这里仍然有一定的灵活性(由于存在编译器宏和符号宏以及完全受支持的
macrolet
;Clojure在通过语法引号中的automagic符号解析实现宏卫生方面具有优势)。读卡器当前已关闭,因此无法自由混合运行时、编译时和读取时1



1除非通过不受支持的方式。

只是为了澄清,在Clojure中可以在任意时间读取代码,然后编译并执行它;然而,不可能像在公共Lisp中那样,插入读取器在读取时执行任意代码。我喜欢这项技术。谢谢你的链接!:-DClojure可以使用
#=
阅读器宏在读取时执行任意代码。@Stuart Sierra:谢谢你的评论,我应该提到这一点!尽管如此,这与可编程读取器没有什么相似之处,这正是我理解PG的要点(你不能用
#=
来“重新编程[Clojure]的语法”)。此外,这是一个可怕的安全隐患(在我看来,默认情况下,
*read eval*
true
是一个不合适的特性);这当然是一个很好的理由,想在像现在这样的上下文中提到它,所以再次感谢。