Я недавно закончил проект, в котором я генерировал списки строк, и мне было интересно, как лучше всего это сделать.
Генерация строки была контекстно-зависимой, чтобы определить, является ли она приемлемой (это была последовательность игр в игре, поэтому вы должны были знать, какой была последняя игра)
То, как я это сделал, было с функцией, которой был передан параметр контекста и термин, и если это было приемлемо, то рекурсивно продолжалось, если это не было завершено (так как никакая дальнейшая строка не могла быть приемлемой.) Функция также получил параметр "length", чтобы убедиться, что он в конце концов завершится
в основном это генерирует каждую возможную строку, принятую языком (определенной длины).
Теперь я получил это на работу, даже довольно хорошо и чисто, но мне было интересно, есть ли лучший способ сделать это. В частности, хорошо ли будет работать монада «конечного автомата» при генерации контекстно-зависимой грамматики? или что-то подобное хотя бы? Кажется, проблема состоит в простом желании запустить что-то вроде parsec. Существуют ли другие структуры, которые эффективны в манипулировании языками?
Любые мысли приветствуются.