Преобразование имени конструктора в строку в OCaml
В моем коде есть следующие определения типов:
type tag =
| Head
| Title
| Body
| H1
| P;;
type domtree =
| Empty
| Node of tag * string * domtree list;;
Мне нужно распечатать теги вместе со строками. Но я не смог найти никакого способа преобразовать тег (имена конструкторов в определении первого типа) в строки и объединить их со Строковой частью domtree. Есть ли какой-то конкретный способ сделать это? Данные, используемые не предоставляют способ для преобразования не-встроенный в строки? Я нашел здесь похожий вопрос, но не совсем понял его.
1 ответ:
В OCaml нет такого средства, и вам нужно будет написать самостоятельно функцию преобразования
tag_to_string : tag -> string
.Легко сгенерировать тело этой строки автоматически, например, используйте этот
sed
однострочный:sed -e 's/\| \(.*\)/| \1 -> "\1"/'
И вставьте определение тега в его стандартный ввод. Это дает
| Head -> "Head" | Title -> "Title" | Body -> "Body" | H1 -> "H1" | P;; -> "P;;"
И вы просто должны очистить
Есть много других решений для определения этого шаблонного кода, я также люблю использовать для этого макросы Emacs.;;
.