Разбор DCG в схеме (без Пролога)?
Вопрос
Существует множество реализаций Prolog-in-Scheme.Например.Канрен, Шелог.
Очевидно, в «Парадигмах программирования искусственного интеллекта» Норвиг реализует компилятор Prolog-to-Lisp в Lisp, чтобы использовать грамматики определенных предложений.
Но есть ли более простой и чистый способ?Может быть, какое-нибудь умное использование amb, чтобы избежать реализации полного «Пролога»?Каков самый простой способ синтаксического анализа на основе DCG в Scheme?
Решение
DCG используют как унификацию, так и возврат с возвратом, поэтому невозможно избежать реализации ядра Пролога.То есть вы можете представить любую программу на чистом Прологе как DCG, анализирующую пустой список.
Вы можете сделать это, если вас интересует только какой-то особый случай DCG, например, без переменных (подходит только для распознавания, а не для анализа).