索引嵌套引号并在scheme中取消其引号
我正在尝试创建一个特殊的折叠功能 我对引号有问题,尤其是嵌套的引号。似乎它们有时被解释为列表的开始,有时被解释为引用 假设我有下一个代码:索引嵌套引号并在scheme中取消其引号,scheme,racket,Scheme,Racket,我正在尝试创建一个特殊的折叠功能 我对引号有问题,尤其是嵌套的引号。似乎它们有时被解释为列表的开始,有时被解释为引用 假设我有下一个代码: '(x '(a b c)) 然后: 将返回:x。而: (cadr '(x '(a b c))) 将返回:'(a b c)。 这是什么意思?这是一张单子吗?如果是,为什么: (caadr '(x '(a b c))) 返回:报价。这句话的意思是什么? 有什么方法可以识别这些类型的列表吗?如果是这样的话,有没有办法将它们取消引号?当我们计算一个带引号的表达
'(x '(a b c))
然后:
将返回:x。而:
(cadr '(x '(a b c)))
将返回:'(a b c)。
这是什么意思?这是一张单子吗?如果是,为什么:
(caadr '(x '(a b c)))
返回:报价。这句话的意思是什么?
有什么方法可以识别这些类型的列表吗?如果是这样的话,有没有办法将它们取消引号?当我们计算一个带引号的表达式时,请记住这个表达式:
'x
只是这个的简写:(quote x)
。例如:
'(x '(a b c))
相当于:
(quote (x (quote (a b c))))
现在,此表达式还将返回一个带引号的表达式,该表达式恰好以另一个带引号的表达式开头:
(cadr (quote (x (quote (a b c)))))
---------------
=> ''(a b c)
在下一个示例中,这一点更为明显,我们最终将检索“quote
符号本身:
(caadr (quote (x (quote (a b c)))))
-----
=> 'quote
对于问题的最后一部分:如果要将最里面的列表解释为列表而不是引用的表达式,则完全不要引用它:
(cadr '(x (a b c)))
=> '(a b c)
当然,我们也可以将第二个quote
和eval
保留在最里面的列表中,但这很麻烦,而且:
或者我们可以使用:
当我们计算带引号的表达式时,请记住此表达式:
'x
只是此表达式的简写:(quote x)
。例如:
'(x '(a b c))
相当于:
(quote (x (quote (a b c))))
现在,此表达式还将返回一个带引号的表达式,该表达式恰好以另一个带引号的表达式开头:
(cadr (quote (x (quote (a b c)))))
---------------
=> ''(a b c)
在下一个示例中,这一点更为明显,我们最终将检索“quote
符号本身:
(caadr (quote (x (quote (a b c)))))
-----
=> 'quote
对于问题的最后一部分:如果要将最里面的列表解释为列表而不是引用的表达式,则完全不要引用它:
(cadr '(x (a b c)))
=> '(a b c)
当然,我们也可以将第二个quote
和eval
保留在最里面的列表中,但这很麻烦,而且:
或者我们可以使用:
当我们计算带引号的表达式时,请记住此表达式:
'x
只是此表达式的简写:(quote x)
。例如:
'(x '(a b c))
相当于:
(quote (x (quote (a b c))))
现在,此表达式还将返回一个带引号的表达式,该表达式恰好以另一个带引号的表达式开头:
(cadr (quote (x (quote (a b c)))))
---------------
=> ''(a b c)
在下一个示例中,这一点更为明显,我们最终将检索“quote
符号本身:
(caadr (quote (x (quote (a b c)))))
-----
=> 'quote
对于问题的最后一部分:如果要将最里面的列表解释为列表而不是引用的表达式,则完全不要引用它:
(cadr '(x (a b c)))
=> '(a b c)
当然,我们也可以将第二个quote
和eval
保留在最里面的列表中,但这很麻烦,而且:
或者我们可以使用:
当我们计算带引号的表达式时,请记住此表达式:
'x
只是此表达式的简写:(quote x)
。例如:
'(x '(a b c))
相当于:
(quote (x (quote (a b c))))
现在,此表达式还将返回一个带引号的表达式,该表达式恰好以另一个带引号的表达式开头:
(cadr (quote (x (quote (a b c)))))
---------------
=> ''(a b c)
在下一个示例中,这一点更为明显,我们最终将检索“quote
符号本身:
(caadr (quote (x (quote (a b c)))))
-----
=> 'quote
对于问题的最后一部分:如果要将最里面的列表解释为列表而不是引用的表达式,则完全不要引用它:
(cadr '(x (a b c)))
=> '(a b c)
当然,我们也可以将第二个quote
和eval
保留在最里面的列表中,但这很麻烦,而且:
或者我们可以使用:
对,明白了。谢谢。@StationaryTraveler太棒了!请看我上一次的编辑,以获得更多的澄清。好的,明白了。谢谢。@StationaryTraveler太棒了!请看我上一次的编辑,以获得更多的澄清。好的,明白了。谢谢。@StationaryTraveler太棒了!请看我上一次的编辑,以获得更多的澄清。好的,明白了。谢谢。@StationaryTraveler太棒了!请参阅我的上一次编辑,以获得一些额外的澄清