#prolog
#пролог
Вопрос:
Я не понимаю, что именно делают эти следующие 4 предиката:
predicate1([H1,H2|T1],X) :−
append([H1,H2|T1],[H2,H1|T1],X).
predicate2wrapper(In, Out) :-
predicate2([ ], In, Out).
predicate2(L, [ ], L).
predicate2(A,[H| T], Out) :-
predicate2([H,H|A],T, Out).
predicate3([X,X], [X,X|_]).
predicate3([X,X], [_,H|T]) :−
predicate3([X,X],[H|T]).
predicate4([ ], _) .
predicate4([H|T], L) :−
member(H,L),
predicate4(T,L).
Я знаю, что все эти предикаты принимают списки в качестве своих аргументов, и я также пытался их запустить, но я всегда получаю Syntax error: operator expected
предупреждение.
Может кто-нибудь, пожалуйста, помочь мне понять, что делают эти предикаты, и, возможно, также помочь мне исправить эту ошибку?
Ответ №1:
Вы скопировали это из pdf или word-документа? Знаки -
-в вашем :-
не являются знаками минус — это вызывает ошибку. Повторно введите их, чтобы решить проблему, а затем вы можете проанализировать предикаты. Как узнать, не совпадают ли одинаковые символы? Я бы предложил использовать инструмент diff (программа для сравнения файлов в командной строке или с графическим интерфейсом (winmerge), даже доступная онлайн) или конвертер ascii в hex, подобный этому.
Примеры запросов, которые дают вам подсказку, что делают эти предикаты:
?- predicate1([1,2,3],L).
?- append([1,2,3],[4,5],L).
?- predicate2wrapper([1,2,3],L).
?- predicate3([c,c],[a,a,b,b]).
?- predicate3([b,b],[a,a,b,b,c,c]).
?- predicate3([X,X],[a,a,c,b,b]).
?- predicate4([a,b],[a,c,b]).
?- predicate4([a,d],[a,c,b]).
?- member(a,[a,c,b]).
?- member(d,[a,c,b]).