2
... 난 어떤 그룹이 있는지 확인해야합니다프롤로그 determinacy - 나는 사실 수 있도록 설정 한 그룹화 사실
fav_fruit(male, young, apple).
fav_fruit(female, young, bannana).
fav_fruit(male, old, bannana).
fav_fruit(female, old, apple).
fav_fruit(female, young, apple).
(성별, 나이) 많은 사람이 좋아하는 과일이있는 곳 (위의 사실에 대한 대답은 (여성, 젊은.)
내가 알아 내려고 시도한 것은 .... 같은 종류의 목록을 반환하는 프롤로그에 aggregate
또는 findall
함수를 사용하는 것입니다 ....
female, young = 2 (apple, bannana)
male, young = 1 (apple)
male, old = 1 (bannana)
female, old = 1 (apple)
... 그런 식으로 각 구성원의 합계를 확인하고 그 값이 1보다 큰지 여부를 테스트 할 수 있습니다.
모든 아이디어를 높이 평가할 수 있습니다. 종류
fav_fruit_class(Gender-Age, List):-
findall(Gender-Age, fav_fruit(Gender, Age, _), LGenderAge),
sort(LGenderAge, SGenderAge),
member(Gender-Age, SGenderAge),
findall(Fruit, fav_fruit(Gender, Age, Fruit), List).
첫 번째 findall은 +
에 대한 것은 클래스 목록 (성별/나이)를 얻는 방법
findall/3 + sort/2 -> setof/3 –
@Paulo Moura : 정확하지는 않지만 setall은 빈 결과 집합으로 실패하지만 findall + sort는 실패합니다. – gusbro
그래서? 위의 findall/3 호출이 빈 목록에서 성공하면 sort/2는 물론 빈 목록을 제공하고 빈 목록에 요소가 없으므로 member/2에 대한 호출이 실패합니다. 따라서 findall/3 + sort/2 호출을 setof/3 호출로 바꿀 수 있습니다. –