Ocaml - 字符串到 (int*int*int) 列表

发布于 2024-11-15 23:55:26 字数 115 浏览 0 评论 0原文

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

谢谢格雷格

Is in ocaml function which can parse string like this "[(1,2,3);(1,2,5);(2,3,4)]" into (int*int*int) list ? or do I have to write my own parsing function ?

Thanks

Greg

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

揽清风入怀 2024-11-22 23:55:26

好吧,在 Scanf 模块——您将能够轻松扫描三元组,然后只需要添加一些逻辑来解析列表。

或者,您可以查看派生

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

Well, it should not be too difficult with help of the Scanf module from the standard library -- you will be able to scan the triples easily and then only have to add a bit of logic to parse a list.

Alternatively you can take a look at deriving:

Extension to OCaml for deriving functions from type declarations. Includes derivers for pretty-printing, type-safe marshalling with structure-sharing, dynamic typing, equality, and more.

沫尐诺 2024-11-22 23:55:26

如果您愿意使用稍微不同的格式,您可以免费获得解析器。使用 sexplib 语法扩展,您可以简单地编写:

type t = (int * int * int) list with sexp

这将自动为您定义两个函数,sexp_of_tt_of_sexp。 Sexlib还提供了多种解析函数。

然而,s 表达式的具体语法是不同的。您的示例将呈现:

((1 2 3) (1 2 5) (2 3 4))

If you're willing to use a somewhat different format, you can have your parser for free. Using the sexplib syntax extension, you can simply write:

type t = (int * int * int) list with sexp

and this will automatically define for you two functions, sexp_of_t and t_of_sexp. Sexplib also provides multiple parsing functions.

The concrete syntax of s-expressions, however, is different. Your example would be rendered:

((1 2 3) (1 2 5) (2 3 4))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文