2017-02-16 6 views
0

Для следующей программы SWI-Prolog я хочу создать предикат, который возвращает все значения, кроме одного.
Например, вернуть всех мужчин, кроме ahmed.
Как я могу это сделать?SWI-Prolog: возвращает все значения, кроме одного

male(ahmed). 
male(mohamed). 
male(ali). 
male(samir). 
male(khalid). 
+2

'- мужчины (P), P \ = ahmed.' – CapelliC

+1

@CapelliC, о, пожалуйста:' диф (P, Ahmed), мужчина (P) ' – false

ответ

1

Не забудьте понять.

Вы хотите предикат, который возвращает одно единственное имя мужчины (без Ахмеда) и, вспоминая его, с помощью обратного травления, другое имя и еще одно ...?

Я полагаю, что вы можете просто написать

noAhmed(M) :- 
    male(M), 
    M \= ahmed. 

Или вы хотите, предикат, который возвращает список со всеми (не Ahmed) мужскими именами?

В этом случае, вы можете написать

noAhmedList(L) :- 
    findall(M, (male(M), M \= ahmed), L). 
+0

Спасибо. Тот, который мне нужен, это noAhmed. –

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

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