В скобочных обозначениях могут использоваться переменные, поэтому это полезно в двух случаях, когда точечные обозначения не будут работать:
1) Когда имена свойств определяются динамически (когда точные имена не известны до времени выполнения).
2) При использовании цикла for..in, чтобы просмотреть все свойства объекта.
источник: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects
Я предполагаю, что вы используете swi в интерактивном режиме, и попытка ввести факт приводит к ошибке, подобной этой:
1 ?- like(x, y).
ERROR: toplevel: Undefined procedure: like/2 (DWIM could not correct goal)
Так как этот факт не существует в базе данных. Если дело обстоит именно так, попробуйте сначала подтвердить этот факт:
2 ?- assert(like(x,y)).
true.
Затем вы можете попробовать:
3 ?- like(x, y).
true.
На этот раз запрос выполняется успешно, поскольку факт существует в базе данных.
Лучшим подходом может быть запись ваших предложений в файл & amp; затем проконсультируйтесь с ними. В прологе Swi есть emacs-подобный редактор, который вы можете вызвать, набрав
emacs.
в командной строке. Или используйте свой собственный редактор & amp; затем просмотрите файл. Пролог Swi поставляется с множеством графических инструментов, которые могут быть полезны; см. руководство для получения более подробной информации.
Вы можете создавать факты в файле пролога и загружать их, используя функцию справки.
Например,
animals.pl
bigger(elephant, tiger).
bigger(tiger, rabbit).
bigger(rabbit, sparrow).
bigger(sparrow, ant).
Вы также можете использовать функцию assert для определения фактов в терминале пролога.
1 ?- assert(bigger(elephant, rabbit)).
true.
Перейдите по этой ссылке , чтобы получить больше информации.