Я устанавливаю следующие правила, чтобы определить, есть ли связь между двумя элементами:
directReference(A,B) :- projectReferences(A,B).
transitiveReference(A,C) :- directReference(A,B),directReference(B,C).
transitiveReferenceD1(A,D) :- transitiveReference(A,C),directReference(C,D).
transitiveReferenceD2(A,E) :- transitiveReferenceD1(A,D),directReference(D,E).
Могу ли я написать PrologScript, который будет проверять все эти запросы на факт? Хотя я планирую использовать Ruby&Rake, кто-то пытается сделать неинтерактивный вызов из PHP здесь, и это не сработало. Я также видел этот ответ и попробовал ответ Каарела. Я только что добавил новый opts_spec
:
opts_spec(
[ [opt(day), type(atom),
shortflags([d]), longflags(['term', 'day']),
help('name of day')]
, [opt(goal),
shortflags([g]), longflags([goal]),
help('goal to be called')]
, [opt(projectReferences), type(atom),
shortflags([pr]), longflags(['term', 'projectReferences']),
help('Project Reference lookup')]
]
).
Затем я скомпилировал с:
.\swipl.exe -o day.exe -g main -c "D:\DevProjects\AskJoe\Output\Sample.pro"
И запустил его с помощью:
./day.exe -g "day(Sunday)"
И получил ошибку:
ОШИБКА: Ошибка инициализации Prolog: ОШИБКА: validate_opts_spec/1: Ошибка домена:
unique_atom' expected, found
term' (неоднозначный флаг)
Моя цель состоит в том, чтобы эта работа:
./day.exe -g "transitiveReference('a','b')"
Мне не нравится компилировать "day.exe" для запуска скрипта (в соответствии с docs в этом часто нет необходимости), но я не нашел другого способа передать аргументы в правила.
Я видел базовое введение на swi-pl.org, которое мало помогло. Он не объясняет, как перейти от примера файла script.sh к выполнению ./eval 1+2
. На самом деле, пример - это комментарий, поэтому я совершенно потерялся.
.\swipl.exe
нужен только для систем Windows. - person Shon   schedule 21.02.2015