Ocaml - строка в (int * int * int) списке - PullRequest
7 голосов
/ 17 июня 2011

Находится ли в функции ocaml, которая может анализировать строку вроде этого "[(1,2,3); (1,2,5); (2,3,4)]" в списке (int * int * int)? или я должен написать свою собственную функцию синтаксического анализа?

Спасибо

Грег

Ответы [ 2 ]

4 голосов
/ 19 июня 2011

Если вы хотите использовать несколько другой формат, вы можете получить свой парсер бесплатно.Используя расширение синтаксиса 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))
4 голосов
/ 17 июня 2011

Что ж, это не должно быть слишком сложно с помощью модуля Scanf из стандартной библиотеки - вы сможете легко сканировать тройки, а затем нужно только добавить немного логики для разборасписок.

В качестве альтернативы вы можете взглянуть на получение :

Расширение до OCaml для получения функций из объявлений типов.Включает в себя производные для симпатичной печати, безопасного сортировки по типу с совместным использованием структуры, динамической типизацией, равенством и т. Д.

...