我正在尝试理解“上下文”表达式(与context
模式相反)。在手册中是这样描述的:
上下文标识 [ expr ]
ident 必须表示由匹配表达式的上下文模式绑定的上下文变量。此表达式求值用 expr 的值替换 ident 值的空洞。
有人可以分享一个例子来说明这个结构的用法吗?我想它必须涉及match
使用context
模式,然后使用上述形式来使用匹配的上下文。
这是一个替换fst (a, _)
witha
和snd (_, b)
with的示例b
,但不涉及fst
并snd
应用于除了 pair 之外的任何东西:
Ltac unfold_proj_pair :=
repeat match goal with
| [ |- context G[fst (?a, _)] ]
=> let G' := context G[a] in change G'
| [ |- context G[snd (_, ?b)] ]
=> let G' := context G[b] in change G'
end.
(请注意,这cbn [fst snd]
是一种更简单的方法,也适用于活页夹。)