Требования к пространству и времени для соответствия процессору ISO-Prolog

Все реализации функционального языка программирования scheme должны выполнить оптимизацией хвостового вызова всякий раз, когда это применимо.

Есть ли у iso-prolog? и / или аналогичные требования?

Мне ясно, что функции процессора Prolog, такие как индексирование главного функтора первого аргумента и сборка мусора атомов, широко используются, но не предписываются стандартом ISO.

Но как насчет пролог-вырезанием?

Считайте, что какая-то система Prolog правильно понимает семантику, но не гарантирует, что ...

rep.
rep :- !, rep.
rep.

?- rep, false.

... может работать вечно с постоянным пространством стека?

Может ли эта система по-прежнему соответствовать ISO-Prolog?


person repeat    schedule 12.04.2019    source источник
comment
Я думаю, что такие вопросы хороши, но они находятся на другом уровне, чем я. Если бы они были на другом форуме для более продвинутого Пролога, мне бы не пришлось тратить так много времени на их поиски здесь.   -  person Guy Coder    schedule 12.04.2019
comment
@GuyCoder. Давайте продолжим обсуждение здесь, в SO, поскольку сообщество Prolog уже достаточно рассредоточено ... а пока пусть U прочитает mitpress.mit.edu/books/art-prolog-second-edition еще не (распечатано, скачать бесплатно в формате pdf)?   -  person repeat    schedule 12.04.2019
comment
У меня есть эта книга, The Craft of Prolog и стандарт ISO. Я знаю, мне стоит их больше прочитать. :)   -  person Guy Coder    schedule 12.04.2019
comment
@repeat: Судя по тому, что вы сказали, вы действительно прочитали стандарт. Если в нем не упоминаются эти требования, то обработчик пролога не должен отвечать им, чтобы подавать жалобу.   -  person gusbro    schedule 12.04.2019
comment
@repeat: Что касается других широко используемых функций ... GNU Prolog, который якобы почти совместим с ISO, не имеет сборки мусора атомов (для этого есть код, но по какой-то причине он не включается по умолчанию при сборке процессор).   -  person gusbro    schedule 12.04.2019
comment
@gusbro. Честно говоря, я до сих пор не прочитал его от корки до корки, поэтому я и спрашиваю :) Что касается GNU Prolog ... Я думаю, что большая страница Ульриха Ноймеркеля Complang.tuwien.ac.at/ulrich/iso-prolog/conformity_testing относится к синтаксису (в основном read_term и write_term). Другие страницы в его сети страниц Complang.tuwien.ac.at/ulrich/ iso-prolog посвящены DCG, встроенным предикатам, оцениваемым функторам и другим важным деталям, но я не мог понять, является ли (или в какой степени) GNU Prolog более совместимым, чем, скажем, SICStus Prolog или нет.   -  person repeat    schedule 12.04.2019


Ответы (1)


Всякий раз, когда вы читаете стандарт, сначала посмотрите на его область применения (domaine d'application, область применения, Anwendungsbereich). Таким образом, применим ли стандарт к тому, что вы хотите знать. А в 13211-1: 1995, 1 Scope есть примечание:

ПРИМЕЧАНИЕ. - Эта часть ISO / IEC 13211 не определяет:

а) размер или сложность текста Пролога, которые будут превышать возможности любой конкретной системы обработки данных или языка
процессора, или действия, которые должны быть предприняты при превышении соответствующих лимитов;

б) минимальные требования к системе обработки данных, которая способна поддерживать реализацию процессора Prolog
;

...

Собственно говоря, это всего лишь заметка. Но если полистать стандарт, то поймешь, что таких требований нет. Для аналогичной ситуации см. Также этот ответ.

Кроме того, ошибки ресурсов (7.12.2 h) и системные ошибки могут возникать на любом этапе выполнения.

Исторически ранние реализации DEC10 не содержали оптимизаций последнего вызова, и программисты прилагали много усилий для использования циклов, управляемых сбоями, или включения использования логарифмического стека.

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

rep2 :- rep2.
rep2.

Даже эта программа может работать бесконечно, не исчерпывая места! И это, хотя лишнюю точку выбора никто не срезает.

Подводя итог, напомним, что соответствие стандарту - это всего лишь предварительное условие для работающей системы.

person false    schedule 12.04.2019