索引嵌套引号并在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太棒了!请参阅我的上一次编辑,以获得一些额外的澄清