什么是类别 - 理论术语中的Lisp` quote`特殊形式?

时间:2018-03-07 21:51:24

标签: lisp monads quote category-theory

在分类理论的背景下,我应该如何看待quotequote是monad吗?这是什么东西?

1 个答案:

答案 0 :(得分:2)

我认为它在类别理论中没有任何作用,因为它与计算没有任何关系,与解析和语法有关。它不是一个单子。

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

引用特殊表单执行相同的操作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放在代码中。为什么数字,字符串,字符和正则表达式都有特殊处理?