在大多数编程语言中,'c'
是一个字符,"c"
是一个长度为1的字符串。但是Coq(根据其标准ascii和字符串库)使用"c"
作为符号对于两者而言,这需要不断使用Open Scope
来澄清哪一个被引用。你怎么能避免这种情况并用通常的方式用单引号指定字符?如果有一个只能部分覆盖标准库的解决方案,更改符号但回收其余部分,那就太好了。
答案 0 :(得分:3)
Require Import Ascii.
Require Import String.
Check "a"%char.
Check "b"%string.
或者
Program Definition c (s:string) : ascii :=
match s with "" => " "%char | String a _ => a end.
Check (c"A").
Check ("A").
答案 1 :(得分:2)
我很自信没有聪明的方法可以做到这一点,但有一点令人讨厌:只需为每个角色声明一个符号。
Notation "''c''" := "c" : char_scope.
Notation "''a''" := "a" : char_scope.
Check 'a'.
Check 'c'.
编写用于自动生成这些声明的脚本不应该太难。但我不知道这对Coq的解析器是否有任何负面影响。