是否在ocaml函数中可以像这样解析字符串“[(1,2,3);(1,2,5);(2,3,4)]”到(int * int * int)列表?或者我是否必须编写自己的解析功能?
由于
格雷格
答案 0 :(得分:4)
嗯,借助标准库中的Scanf模块,它应该不会太困难 - 您将能够轻松扫描三元组,然后只需要添加一些逻辑来解析列表
或者您可以查看deriving:
扩展到OCaml以从类型声明中派生函数。包括用于漂亮打印,类型安全编组的派生程序,包括结构共享,动态类型,相等等。
答案 1 :(得分:4)
如果您愿意使用稍微不同的格式,您可以免费使用解析器。使用sexplib语法扩展,您只需编写:
type t = (int * int * int) list with sexp
这将自动为您定义两个函数sexp_of_t
和t_of_sexp
。 Sexplib还提供了多种解析功能。
然而,s表达式的具体语法是不同的。您的示例将呈现:
((1 2 3) (1 2 5) (2 3 4))