Nano Hash - криптовалюты, майнинг, программирование

Может ли предложение Пролога быть двусмысленным?

Может ли предложение Пролога быть двусмысленным, и не могли бы вы показать мне пример?

Я знаю, что синтаксические анализаторы могут быть неоднозначными в том смысле, что они могут генерировать два разных дерева синтаксического анализа...

01.10.2013

Ответы:


1

Нет, Пролог формально не является двусмысленным, но предлагает синтаксическую особенность, которая может привести к трудным для понимания программам, а именно op/3 объявление. Как вы можете прочитать в документации

Приложения должны быть осторожны с (пере)определением операторов, потому что изменение операторов может привести к тому, что (другие) файлы будут интерпретироваться по-другому.

Это похоже на перегрузку операторов C++ на стероидах, и возможность определять новые операторы (или переопределять уже известные системе) может быть очень ценной при программировании DSL (предметно-ориентированных языков). См., например, библиотеку (clpfd) или лямбда.

Историческое значение имеет точечный оператор. В основном он используется в качестве терминатора предложения, но более старый Пролог использовал его как «список минусов». Вот мой ответ на эту тему. Обратите внимание на начальное объявление

:- op(103, xfy, (.)).

что позволяет компактное определение (например)

seek_call(A.As, _.Ms, B.As, V) :-
    nonvar(A),
    A =.. F.FAs,
    seek_call(FAs, Ms, FBs, V),
    !, B =.. F.FBs.

это эквивалентно

seek_call([A|As], [_|Ms], [B|As], V) :-
    nonvar(A),
    A =.. [F|FAs],
    seek_call(FAs, Ms, FBs, V),
    !, B =.. [F|FBs].
01.10.2013
  • Стоит отметить, что если вместо этого вы использовали xfx, вы могли бы вывести ошибку конфликта приоритета оператора из Пролога, выполнив что-то вроде X.Y.Z. Однако неоднозначность разрешается ошибкой. 02.10.2013
  • @DanielLyons: Не уверен, что понимаю. xfx предназначен именно для запрета A op B op C. yfy недопустим, потому что это может привести к двусмысленности. 02.10.2013
  • Я думал, что xfx означает, что оператор неассоциативен, где xfy означает правоассоциативный, а yfx означает левоассоциативный (IIRC). Я просто хочу сказать, что пользователь может создать подобную двусмысленность, и Пролог разрешает ее с ошибкой, а не с несколькими успешными разборами. 02.10.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..