2016-12-31 4 views
1

Это список и два элемента. Сначала мне нужно было проверить, являются ли эти два элемента частью списка. Затем проверьте, появляется ли элемент Elem2
после Elem1 в данном списке. Предикат, который я использую, - weiterHinten с тремя аргументами.Предикат, чтобы проверить, находится ли элемент за другим элементом в списке

Пример: проверьте, что c находится после b в списке [a, c, b, a].

weiterHinten([H|T],H,B). 
weiterHinten([H|T],A,B):-weiterHinten(T,A,B). 

weiterHinten([a,c,b,a],b,c). 

Эта цель будет необходимо вернуться false.I знать, что после того, как я нахожу заголовок списка будет равен A мне нужно проверить, если B является членом хвоста списка. Если это так, значит, B после A в списке, но я не уверен, как это сделать.

Я пробовал:

weiterHinten([H|T],H,B):-member(B,T). 

Но всякий раз, когда я звоню цели он всегда возвращает истину для меня не имеет значения, если Elem2 был после Elem1

+0

Я не уверен, что ваш вопрос. Это может помочь, если вы укажете, что означает «он не работает таким образом» на самом деле означает; что он делает. В любом случае, я пытался ответить, дайте мне знать, помогло ли это. – user7610

+0

Я имел в виду, что всякий раз, когда я вызывал цель, он всегда возвращался для меня, независимо от того, был ли Elem2 после Elem1 в списке или нет. Например, эта цель:? - weiterHinten ([a, c, b, a], b, c). вернулись ко мне верно, даже если это не так. – UserMeli

ответ

1

Оставьте weiterHinten([H|T],H,B). исключаю. Это синтаксический ярлык для weiterHinten([H|T],H,B) :- true., и это абсурд.

Это работает для меня:

weiterHinten([H|T],H,B) :- member(B, T). 
weiterHinten([H|T],A,B) :- weiterHinten(T,A,B). 

Результаты

| ?- weiterHinten([a,c,b,a],b,c). 

no 
| ?- weiterHinten([a,b,c,a],b,c). 

true 
+0

Это действительно работает. Спасибо огромное ! – UserMeli

 Смежные вопросы

  • Нет связанных вопросов^_^