我正在学习 OCaml 的大学课程,需要使用容器库将 s-expr 解析为正确的 AST 表示形式
我需要扩展解析器以包含布尔值,但我找不到一种优雅的方法来模式匹配字符串而不是嵌套更多模式匹配。
所以我想知道是否有更好的方法来做到这一点。
到目前为止,如果解析器检测到“原子字符串”,它会“打开”嵌套的匹配情况以查看它是 int 还是变量名。
这个解决方案有效,但仅通过观察我就知道它可以设计得更好,但我对 OCaml 不够熟悉,不知道如何使其变得更好。
您可以“展平”模式匹配,但代价是可能进行不必要的评估
bool_of_string_opt s
。
match int_of_string_opt s, bool_of_string_opt s with
| Some n, _ -> Num n
| _, Some b -> Bool b
| _, _ -> Var s