Ошибка при компиляции кода на Prolog в онлайн компиляторе
Код:
predicates
nondeterm object3(list,list,string)
clauses
Object3(I,O,sentence):-
Object3(I,R,noun_group),
Object3(R,O,verb_group).
Object3(I,O,verb_group):-
Object3(I,R,verb),
Object3(R,O,noun_group).
Object3(I,O,noun_group):-
Object3(I,R,adj),
Object3(R,O,noun).
Object3(I,O,adj):-
Object3(I,O,adjective).
Object3(I,I,adj).
Object3([профессиональный|R],R,adjective).
Object3([любительский|R],R,adjective).
Object3([начальный|R],R,adjective).
Object3([детский|R],R,adjective).
Object3([футбол|R],R,noun).
Object3([хоккей|R],R,noun).
Object3([бейсбол|R],R,noun).
Object3([регби|R],R,noun).
Object3([баскетбол|R],R,noun).
Object3([волейбол|R],R,noun).
Object3([играть|R],R,verb).
Object3([увлекаться|R],R,verb).
Object3([смотреть|R],R,verb).
Object3([заниматься|R],R,verb).
Выдает такие ошибки
main.pro:2:1: syntax error: . or operator expected after expression
main.pro:8:8: syntax error: . or operator expected after expression
main.pro:12:8: syntax error: . or operator expected after expression
main.pro:16:8: syntax error: . or operator expected after expression
main.pro:19:8: syntax error: . or operator expected after expression
main.pro:21:8: syntax error: . or operator expected after expression
main.pro:22:8: syntax error: . or operator expected after expression
main.pro:23:8: syntax error: . or operator expected after expression
main.pro:24:8: syntax error: . or operator expected after expression
main.pro:26:8: syntax error: . or operator expected after expression
main.pro:27:8: syntax error: . or operator expected after expression
main.pro:28:8: syntax error: . or operator expected after expression
main.pro:29:8: syntax error: . or operator expected after expression
main.pro:30:8: syntax error: . or operator expected after expression
main.pro:31:8: syntax error: . or operator expected after expression
main.pro:33:8: syntax error: . or operator expected after expression
main.pro:34:8: syntax error: . or operator expected after expression
main.pro:35:8: syntax error: . or operator expected after expression
main.pro:36:8: syntax error: . or operator expected after expression
19 error(s)
compilation failed
Ответы (1 шт):
Автор решения: insolor
→ Ссылка
- Убираете первые три строки. Насколько я знаю, они специфичны только для Turbo Prolog и Visual Prolog, в других диалектах не нужны.
- Заменяете
Object3наobject3. Обычно с большой буквы записываются только переменные. В Turbo Prolog и Visual Prolog может быть по-другому, но я с ними не работал, не могу сказать, работало бы там. Но вообще у вас даже вpredicatesobject3с маленькой буквы записан. - Оберните все атомы на русском в одинарные кавычки (или перепишите их латиницей).
Итого получается такой код:
object3(I,O,sentence):-
object3(I,R,noun_group),
object3(R,O,verb_group).
object3(I,O,verb_group):-
object3(I,R,verb),
object3(R,O,noun_group).
object3(I,O,noun_group):-
object3(I,R,adj),
object3(R,O,noun).
object3(I,O,adj):-
object3(I,O,adjective).
object3(I,I,adj).
object3(['профессиональный'|R],R,adjective).
object3(['любительский'|R],R,adjective).
object3(['начальный'|R],R,adjective).
object3(['детский'|R],R,adjective).
object3(['футбол'|R],R,noun).
object3(['хоккей'|R],R,noun).
object3(['бейсбол'|R],R,noun).
object3(['регби'|R],R,noun).
object3(['баскетбол'|R],R,noun).
object3(['волейбол'|R],R,noun).
object3(['играть'|R],R,verb).
object3(['увлекаться'|R],R,verb).
object3(['смотреть'|R],R,verb).
object3(['заниматься'|R],R,verb).
Ошибок он не выдает, но пишет, что не задана начальная цель (https://onecompiler.com/prolog/3yv37b4fm):
Warning: no initial goal executed
use a directive :- initialization(Goal)
or remove the link option --no-top-level (or --min-bips or --min-size)
Т.е. упрощенно говоря, нужно через :- initialization(что-то) запустить какой-то запрос. Какие запросы можно задавать к вашему коду так сходу не понять. В минимальном виде выполнение запроса должно выглядеть так:
something(a, b).
:- initialization(main).
main :- something(a, X), write(X).
Вывод:
b