【问题标题】:Ocaml - string to (int*int*int) listOcaml - 字符串到 (int*int*int) 列表
【发布时间】:2011-09-17 08:30:36
【问题描述】:

在 ocaml 函数中,它可以将这样的字符串 "[(1,2,3);(1,2,5);(2,3,4)]" 解析为 (int*int*int) 列表?还是我必须编写自己的解析函数?

谢谢

格雷格

【问题讨论】:

    标签: string list int ocaml


    【解决方案1】:

    好吧,借助标准库中的 Scanf 模块,这应该不会太难——您将能够轻松地扫描三元组,然后只需要添加一些逻辑来解析列表。

    你也可以看看deriving:

    对 OCaml 的扩展,用于从类型声明派生函数。包括用于漂亮打印、具有结构共享、动态类型、相等性等的类型安全编组的派生程序。

    【讨论】:

    • 谢谢,我是这样做的,不是很漂亮,但很有效;) let rec parse_string s = match s with | _ 当 String.length s > 7 -> (Scanf.sscanf (String.sub s 1 7) "(%i,%i,%i)" (fun abc -> (a,b,c))):: (parse_string (String.sub s 8 ((String.length s)-8))) |_ -> [];;
    【解决方案2】:

    如果您愿意使用稍微不同的格式,您可以免费获得解析器。使用 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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多