lisp - 范畴论术语中的 Lisp `quote` 特殊形式是什么?

标签 lisp monads quote category-theory

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

最佳答案

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

假设您想要字符串 5 + 1 , 你做什么工作?好吧,你把它用双引号括起来,比如 "5 + 1"在代码中,突然结果不是 6不再是字符串 "5 + 1" .是""范畴论中有什么特别之处吗?它是单子(monad)吗?不要这么认为,因为它告诉编译器创建这样一个产生该字符串的数据结构。在 Haskell 中 "hello"只是 ['H', 'e', 'l', 'l', 'o'] 的语法糖.在大多数语言中,字符串只是一系列连续的字节,通常是一个数组。

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

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

关于lisp - 范畴论术语中的 Lisp `quote` 特殊形式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49161822/

相关文章:

lisp - SHOW/READ/READ-LINE/etc Scheme 程序

list - 如何仅使用 cons 和空列表创建列表? Racket

functional-programming - 为什么我们在 Lisp 解释器中使用序列到表达式的转换?

visual-c++ - 使用 LISP 加载和卸载 .arx 文件

scala - Kleisli Arrow with Writer in Scala。为什么不编译?

linux - Bash Shell - 引用问题

Haskell:并行计算和monads的 'sequential property'

scala - 读者作者状态monad-如何运行此scala代码

common-lisp - 在函数内的符号前使用引号?

java - 为什么这段代码中需要引号?