Я представляю программу, которая принимает аргумент (атом). Затем расщепляет его на части, как это определено в программе, например, я хотел быКак определить, содержит ли атом дополнительный атом в Prolog
func(argv) :-
atom_split(argv,'else:',Commands),
atom_split(argv,'+',Commands),
atom_split(argv,'==',Commands),
atom_split(argv,'>',Commands),
atom_split(argv,'<',Commands),
atom_split(argv,'!=',Commands),
расщеплять атом в его основных частей, предпочтительно в порядке очереди для разбора позже. Кроме того, не все части обязательно будут частью входного атома, что добавит его сложности. В идеале, в конце концов, я бы стек с отдельными частями атома раздельным, например
func('A+B==C').
func(argv) :-
atom_split(argv,'else:',Commands),
atom_split(argv,'+',Commands),
atom_split(argv,'==',Commands),
atom_split(argv,'>',Commands),
atom_split(argv,'<',Commands),
atom_split(argv,'!=',Commands),
Commands = [A,+,B,==,C].
я затем использовать эти команды, чтобы сказать, если что-то вписывается в грамматике:
?- func(‘E+d;’).
true.
?-func(‘if:a and b’).
false.
Обратите внимание, что 'atom_split/3' специфичен для некоторых реализаций - и не полностью определен. Стандарт ИСО представлен в [8.16] (http://www.complang.tuwien.ac.at/ulrich/iso-prolog/prologue#8.16): 'sub_atom/5',' atom_concat/2'. – false