2014-12-08 4 views
0

모든 여성 목록을 반환하는 조건자를 만들려고합니다. 지금까지 내가 가진 :목록 반환 : 프롤로그

female(elisabeth). 
female(queenmother). 
female(diana). 
female(anne). 
female(beatrice). 
female(sarah). 
female(zara). 
female(kate). 

the_royal_females([X|_]). 
the_royal_females([X|_]) :- female(X). 

하지만이 individuly 내가 대신 [elisabeth,queenmother,diana]을 반환받을 수있는 방법

X = elisabeth ; 
X = queenmother ; 
X = diana ; 

처럼 각 여성을 반환?

+0

@BhargavRao :이 제목 변경은 도움이되지 않습니다. – false

답변

1

당신은 findall/3를 사용할 수 있습니다

the_royal_females(Lst):-findall(F,female(F),Lst). 

findallLst의 모든 인스턴스 생성을 가능한 모든 방법으로 female(F)을 만족시키면서 F 가져 것이다.

+0

'setof/3', please – false

+0

@false 왜? 나는 보통'setof/3'를 피합니다. 왜냐하면 목표를 만족할 수 없을 때'[]'대신에 false를 반환하기 때문입니다. –

+0

'findall/3'은 우연한 해답의 순서를 보여주고 있기 때문에'setof/3'는 숨 깁니다. 그리고'setof/3'는 좀 더 일반적인 질의 등에서도'여성 (F)'을'성 (F, 여성)'으로 대체합니다. 그리고 '여성'을'성별 '로 대체 한 질의를 일반화합니다. 'findall/3'은 깨지게되지만'setof/3'은 정확합니다. – false