- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
像 Haskell(或 Nemerle)这样的语言有 quasiquotations 。我想知道“准”是什么意思,是否也存在没有“准”部分的“引文”。
最佳答案
我相信这个概念来自 Lisp 语言。
用 Lisp 编写的程序由一系列列表的列表等组成,如下所示:
(defn f [x y] (+ x y))
由于这种一致性,可以将此类代码作为数据来表示和操作,因此上面的字符序列被解释为文字列表。这是 Lisp 非常有用的特性,也是它们的显着特性之一。为了方便起见,Lisp 语言允许“引用”有意义的序列,将它们从定义和表达式转换为列表。它看起来像这样:
'(defn f [x y] (+ x y))
在本例中,它是一个文字列表,可以直接使用 Haskell 的 head
和 tail
的类似方法以及其他方法进行解构。因此,“引用”的意思是“从列表中生成一个文字值”。
但是,直接使用 head
和 tail
之类的函数来操作列表并不方便。当您开始编写复杂的宏甚至宏生成宏时,它就会变得值得注意。所以这里出现了“准引用”,字面意思是“几乎是引用”。通常准引用看起来像普通引用(但带有另一个引用符号):
`(defn f [x y] (+ x y))
但它是更强大的东西。在准引用列表中,您可以用外部范围中的实际值替换任意元素,本质上获得类似模式的东西。示例:
(let [z 10] `(defn f [x y] (+ x y ~z)))
这里我们将值 10
绑定(bind)到 z
变量,然后将其替换到准引号内。这个表达式产生
'(defn f [x y] (+ x y 10))
这是一个简单的例子; Lisp 语言允许使用准引号做许多其他有用的事情。
这个概念已经转移到其他支持语法树操作的语言。例如,这里的 Haskell 工具是 Template Haskell,它完全支持准引用,即创建模板并用外部范围的值填充它们。在具有复杂语法的语言(如 Haskell)中,准引用和普通引用几乎成为操作语法树的唯一合理方式。
UPD:嗯,看来在 Haskell 中它是比简单替换更复杂的功能。 Haskell 中的 Quasiquote 看起来像是可以由用户定义的任意转换器和表达式求值器。
关于haskell - 准引号中的 “quasi” 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10556631/
我正在尝试创建(在Java中)一个包含指定数量的整数k(例如,50、500、1000等)的整数数组,该数组不使用库函数或集合,但包含随机数范围内(即从 1 到 k)的数字分类,具有指定的重复百分比。
例如: MY_MESSAGE = 'Dear %s, hello.' # ... name = "jj" print MY_MESSAGE % name python 是否具有完成类似我上面的代码的功
我有一个使用 NUnit 3.4.1、NSubstitute 1.10.0 和 NCrunch 2.23.0.2 的文本夹具 此夹具中在任何时间点都有 2 个失败测试。每次我更改某些内容时,哪个测试失
我是一名优秀的程序员,十分优秀!