Возвращение списка в прологе - PullRequest
0 голосов
/ 02 мая 2011

Я хочу задать вопрос о возврате списка ... Факты:

КОМАНДА (ИМЯ КОМАНДЫ, ДИРЕКТОР, NATIOANALITY, OVERALLGOAL)

team (milan,allegri,italy, 8.5).
team (inter,benitez,italy,7.6).
team (barcelona,guardiola,spain,7.8).
team (realmadrid,mourinho,spain,7.2).

и я хочу создать предикат:find (T, N, G): T - это название команды, N - это национальность команды, и общая цель этой команды должна быть больше G. И результаты должны быть такими:

find([], spain,9). returns true

find(X, spain,6). returns X=[barcelona, realmadrid]

Я пытался сделать это с помощью:

find(T,N,G):-find1(T,N,G),is_set(T).

find1([]).

find1([T|Ts],N,G):-team(T,_,N,Gs),Gc>G,find1(Ts).

это дает результаты, но не как вывод выше ... если моя цель найти ([], Испания, 9).тогда дайте ложь ... если моя цель найти (X, Испания, 6).затем дайте сначала X = barcelona и дождитесь ";"после этого дайте X = realmadrid ... но я хочу список, как указано выше ...

Большое спасибо ...

1 Ответ

0 голосов
/ 02 мая 2011

Чтобы извлечь список элементов, удовлетворяющих предикату, из базы данных предложений, необходимо использовать предикат findall. Например, ваш код может быть переписан следующим образом:

find(T, N, G) :- findall(X, (team(X, _, N, G0), G0 > G), T).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...