范畴论术语中的 Lisp `quote` 特殊形式是什么?
What's the Lisp `quote` special form in category-theoretical terms?
在范畴论的背景下,我应该如何看待 quote
? quote
是单子吗?这是什么东西?
我认为它在范畴论中没有任何作用,因为它与计算无关,而与解析和语法有关。它不是单子。
假设您想要字符串 5 + 1
,您会怎么做?好吧,您将它用双引号括起来,例如代码中的 "5 + 1"
,突然结果不再是 6
,而是字符串 "5 + 1"
。 ""
范畴论有什么特别之处吗?它是单子吗?不要这么认为,因为它告诉编译器创建这样一个产生该字符串的数据结构。在 Haskell 中,"hello"
只是 ['H', 'e', 'l', 'l', 'o']
的花哨语法糖。在大多数语言中,字符串只是一系列连续的字节,通常是一个数组。
quote 特殊形式执行相同的操作 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
放在代码中的任何地方。为什么要对数字、字符串、字符和正则表达式进行特殊处理?
在范畴论的背景下,我应该如何看待 quote
? quote
是单子吗?这是什么东西?
我认为它在范畴论中没有任何作用,因为它与计算无关,而与解析和语法有关。它不是单子。
假设您想要字符串 5 + 1
,您会怎么做?好吧,您将它用双引号括起来,例如代码中的 "5 + 1"
,突然结果不再是 6
,而是字符串 "5 + 1"
。 ""
范畴论有什么特别之处吗?它是单子吗?不要这么认为,因为它告诉编译器创建这样一个产生该字符串的数据结构。在 Haskell 中,"hello"
只是 ['H', 'e', 'l', 'l', 'o']
的花哨语法糖。在大多数语言中,字符串只是一系列连续的字节,通常是一个数组。
quote 特殊形式执行相同的操作 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
放在代码中的任何地方。为什么要对数字、字符串、字符和正则表达式进行特殊处理?