为什么在大小写表达式中忽略单引号?

时间:2018-12-06 09:48:45

标签: racket quote

(case 'x
   [(x) "ex"]
   [('x) "quoted ex"])

我认为输出为"quoted ex",但实际上为"ex"。为什么'x匹配x但不匹配'x

1 个答案:

答案 0 :(得分:1)

在第一种情况下,documentation(强调我的名字)中已经引用了(x)

  

selected子句是第一个带有 datum 的子句,其 {quoted 形式为equal?val-expr的结果。

因此,('x)被双引号引起来。如果要匹配第二种情况,则必须执行以下操作:

(case ''x
  [(x) "ex"]
  [('x) "quoted ex"])

=> "quoted ex"

换句话说,代码中的第一个条件是测试(equal? 'x 'x)是否被测试,第二个条件是测试(equal? 'x ''x),显然只有第一个匹配。