在范畴理论术语中,Lisp"引用"的特殊形式是什么?



在范畴论的背景下,我应该如何看待quotequote是单子吗?这是什么东西?

我不认为它在范畴论中扮演任何角色,因为它与计算无关,而与解析和语法有关。它不是单子。

想象一下你想要字符串5 + 1,你会怎么做?好吧,您将它括在双引号中,例如代码中的"5 + 1",突然间结果不再6,而是字符串"5 + 1"""范畴论有什么特别之处吗?是一元吗?不要这么认为,因为它告诉编译器创建这样的数据结构来生成该字符串。在Haskell中,"hello"只是['H', 'e', 'l', 'l', 'o']的花哨语法糖。在大多数语言中,字符串只是一系列连续的字节,通常是一个数组。

引号特殊形式执行与 syck 相同的操作 syck,'(+ 1 2)不再是表达式,而是数据。编译器会(cons '+ (cons '1 (cons '2 '())))并存储指向该指针的指针,以便在您有一些文字结尾的地方(+ 1 2).因此,(eq '(1 2) (cdr '(+ 1 2))可能是#t#f同样合理的结果,因为编译器可能不会针对共享结构进行优化。

展望未来,你可以想象一种花哨的语言,它可以规定解析器和编译器如何解释文字。我知道的几乎所有语言都有字符串文字,但是如果你编写代码来对复数进行建模,那么在代码中说3+5i应该变得tmp1 = make_complex 3 5并且tmp1应该放在代码中存在的文字3+5i的任何位置会很酷。为什么数字、字符串、字符和正则表达式应该有特殊的处理?

最新更新