Я пишу программу на Прологе и пытаюсь включить модули в структуру программы, чтобы инкапсулировать сложность и уменьшить избыточную функциональность.
Одна особенность, с которой у меня возникают трудности, — это использование метапредикатов. Я хотел бы определить метапредикат в одном модуле, а затем импортировать его в другой модуль; это вносит осложнения. К счастью, директива meta_predicate
помогает разрешать префиксы модулей, но у меня возникли проблемы с пониманием аргументов, описанных здесь: https://www.swi-prolog.org/pldoc/man?section=metapred
В частности, у меня проблемы с числовыми аргументами. Согласно документации:
Аргумент — это термин, который используется для ссылки на предикат с числом аргументов на N больше, чем у данного термина аргумента. Например: call(0) или maplist(1, +).
Я понимаю, что аргумент, обозначенный числовым значением, будет термином, который используется для ссылки на предикат. Чего я не понимаю, так это того, как указанный предикат может иметь больше аргументов, чем термин аргумента. Может ли кто-нибудь предложить более подробное объяснение того, когда подходит числовой аргумент, или пример того, когда его целесообразно использовать?