2016-12-15 6 views
0

Если у вас есть определение check_entries (X, Y)., Кто-нибудь знает, что будет лучшим способом рекурсивно проверять два списка и перебирать эти списки и сравнивать каждый элемент, чтобы узнать, отличаются ли они или нет? Я знаю, что вы где-то использовали оператор = \ =, но я не уверен, что еще делать ...Как вы проверяете каждый элемент в двух списках рекурсивно в Prolog?

Пожалуйста, помогите, спасибо. Рекурсия - моя слабость :-(.

В частности, я хочу знать, как проверить, что два списка номеров L1, L2 различаются по каждому индексу. Я также хотел бы знать, как использовать = \ = для проверки неравенства

+0

1. Не ясно, что вы просите. Вы должны объяснить лучше (яснее). 2. Если вы написали алгоритм, даже итеративный, в псевдокоде, будет намного легче узнать, какой у вас план решения. Пожалуйста, отредактируйте свой вопрос! –

+0

Добавлено больше разъяснений. – F1R3

+0

Вы пробовали прочитать учебник и документацию Prolog? –

ответ

0

Рекурсия не является необходимым:.

all_different(L1, L2) :- forall(member(X, L1), \+ memberchk(X, L2)). 

Edit: на самом деле, ваш вопрос на самом деле, чтобы гарантировать, что если вы подходите списки Одноручное по -не, они разные. Таким образом, эти два будут отличаться: [1,2,1] и [2,1,2].

Я до сих пор не заморачиваться с рекурсией, хотя я думаю, вы могли бы:

all_different(L1, L2) :- maplist(=\=, L1, L2). 
+1

Просто для ясности: это удается, если два списка не разделяют никаких элементов («объединение» - это пустой набор). Не уверен, что это то, что ОП задает :) Кстати, оба списка должны быть заземлены, чтобы это работало по назначению. –

+0

Я не думаю, что это работает правильно. Он просто возвращает «да». Я хочу знать, как проверить, что два списка номеров L1, L2 различны для каждого индекса. Я также хотел бы знать, как использовать = \ = для проверки неравенства. – F1R3

+0

Если у вас есть способ сделать это без рекурсии, но используя оператор =/=, тогда это тоже хорошо. Благодарю. – F1R3

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

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