2010-03-03 8 views

Répondre

5

Ils sont très similaires à partir d'un niveau élevé. Les deux sont déclaratifs ou basés sur des ensembles plutôt que sur des itérations (ce qui signifie que vous demandez ce que vous voulez - vous ne faites pas une boucle et ne traitez pas les éléments individuels un par un).

CLP peut être modélisé en SQL mais il s'agit de trouver une meilleure solution à un problème. SQL est utile pour trouver des réponses dans un ensemble de données déjà défini explicitement. CLP est bon pour trouver des réponses dans des domaines qui sont vaguement ou même parfois même pas complètement définis.

À titre d'exemple. Si je voulais retourner tous les nombres pairs entre 1 et 10 millions en utilisant SQL, j'aurais besoin d'une table avec tous les nombres listés pour en faire un choix (un ensemble de données existant). En utilisant CLP, j'aurais juste besoin d'un bound (10M) mais je n'aurais pas besoin de créer explicitement tous les enregistrements.

En interne, les moteurs CLP (problèmes CSP) peuvent également déduire des contraintes pour les rendre plus rapides. SQL vous auriez à comprendre ces règles et à les énoncer explicitement. Par exemple, si votre SQL est où A = B et B = C, un moteur CLP pourrait comprendre que A = C et l'utiliser pour courir plus vite là où SQL ne le ferait pas. Ils peuvent également déduire des domaines afin d'optimiser le temps d'exécution (si je sais que les nombres pairs ne sont jamais retournés, un CLP les rejettera - SQL les considèrera toujours mais ne les renverra pas comme une "solution").

J'espère que cela aide - je peux obtenir plus technique si vous en avez besoin. Le point clé à retenir est que les deux sont similaires mais que vous utilisez dépend du modèle de problème. Si vous pouvez dire "ce sont mes variables, et ce sont les interrelations, donnez-moi une solution valable" alors CLP est un bon candidat. Si vous pouvez dire "il y a mes variables, et ce sont les spécificités, donnez-moi un sous-ensemble de mes données existantes qui correspond" alors SQL est un meilleur candidat.

+0

Merci pour votre réponse! – bobobobo

+0

Les deux sont intrinsèquement basés sur une vision relationnelle du monde. Le langage fondamental pour raisonner sur les relations est la logique classique. La programmation SQL et la programmation par contraintes (logique) sont toutes deux des implémentations spécialisées de la logique classique. – HolKann

0

Je n'ai pas de réponse complète, mais vous pourriez trouver intéressant de regarder Datalog et DLV. Ils sont peut-être le «chaînon manquant» entre la programmation logique (mais pas CLP) et SQL qui vous aidera à comprendre les choses plus clairement.

Comme il s'agit plus sur LP que CLP j'ai manqué quelque chose - si oui, désolé.

Questions connexes