【问题标题】:What's the Lisp `quote` special form in category-theoretical terms?类别理论术语中的 Lisp `quote` 特殊形式是什么?
【发布时间】:2018-03-07 21:51:24
【问题描述】:

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

【问题讨论】:

    标签: lisp monads quote category-theory


    【解决方案1】:

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

    假设你想要字符串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 将被放置在任何地方文字 @987654337 会很酷@ 存在于代码中。为什么要对数字、字符串、字符以及正则表达式进行特殊处理?

    【讨论】:

      猜你喜欢
      • 2013-06-12
      • 2011-04-23
      • 2011-10-08
      • 2015-09-06
      • 2012-03-12
      • 1970-01-01
      • 2011-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多