C'est une bonne question!
Je ne cherche pas à donner une réponse exhaustive, mais je voudrais suggérer quelques pistes de réflexion qui peuvent vous aider à comprendre ces prédicats mieux:
- Pensez à laquelle de ces prédicats sont plus fondamental dans le sens de ce qui peut être exprimé en termes de ce que. Par exemple, pouvez-vous exprimer
findall/3
en termes de setof/3
? Et qu'en est-il de l'inverse? Cela aide à voir ce que vous devez fournir au moins pour implémenter tous ces prédicats. Pensez aux propriétés déclaratives qui sont conservées par ces prédicats. Par exemple, l'ordre dans lequel les solutions sont trouvées influence-t-il les résultats? Pour lequel de ces prédicats précisément? Est-ce que l'un de ces prédicats peut échouer? Dans quels cas précisément?
- Pensez à la complexité de l'espace et du temps de chacun de ces prédicats. Lequel de ces prédicats, le cas échéant, peut-il être mis en œuvre et utilisé plus efficacement que d'autres? Et à quel coût et compromis?
De plus, je vous recommande de lire le livre de Richard O'Keefe Le Craft de Prolog pour obtenir des informations précieuses sur ces prédicats.
Le lien que vous avez donné explique 'findall/3' versus' bagof/3'. 'setof/3' est comme' bagof/3', sauf qu'il supprime les solutions redondantes (les éléments de la liste de résultats sont uniques) et il classe les résultats dans l'ordre croissant. – lurker
Réponse courte: dépend de ce que vous voulez réaliser. Vous pourriez obtenir plus de réponses _useful_ si vous décrivez un cas d'utilisation concret et comparez les trois ('bagof/3',' setof/3', et 'findall/3') dans le contexte de votre cas d'utilisation. –