Pergunta

Ao ler em Programação de restrição-lógica, Não posso deixar de notar um relacionamento aparente com a programação SQL. O SQL é um exemplo de "programação lógica de restrição" em ação?

Foi útil?

Solução

Eles são muito semelhantes de um nível alto. Ambos são declarativos ou com base em conjunto, e não iterativos (o que significa que você pede o que deseja - você não passa por itens individuais um por um).

O CLP pode ser modelado no SQL, mas é um caso de encontrar uma solução melhor para um problema. O SQL é bom para encontrar respostas em um determinado conjunto de dados que já está explicitamente definido. O CLP é bom para encontrar respostas em domínios que são vagamente ou às vezes até mesmo completamente definidos.

Como um exemplo. Se eu quisesse retornar todos os números pares entre 1 e 10 milhões usando o SQL, precisaria de uma tabela com todos os números listados para selecionar (um conjunto de dados existente). Usando o CLP, eu precisaria apenas de um limite (10m), mas não precisaria criar todos os registros.

Os motores CLP internamente (problemas de CSP) também podem inferir restrições para torná -los mais rápidos. SQL Você teria que descobrir essas regras e declará -las explicitamente. Por exemplo, se o seu SQL é onde A = B e B = C, um mecanismo CLP pode descobrir que A = C e usá -lo para correr mais rápido onde o SQL não o faria. Da mesma forma, eles também podem inferir domínios para otimizar o tempo de execução (se eu souber que os números pares nunca são devolvidos, um CLP os jogará fora da consideração - o SQL ainda os considerará, mas não retornará como uma "solução").

Espero que isso ajude - eu posso ficar mais técnico, se você precisar. O ponto principal a lembrar é que os dois são semelhantes, mas que você usa depende do modelo de problemas. Se você pode dizer "essas são minhas variáveis, e é assim que a inter -relacionação, dê -me qualquer solução válida", o CLP é um bom candidato. Se você pode dizer "existem minhas variáveis, e essas são específicas, devolva -me um subconjunto dos meus dados existentes que se encaixam", então o SQL é um candidato melhor.

Outras dicas

Não tenho uma resposta completa, mas você pode achar interessante olhar para o Datalog e o DLV. Eles são talvez o "link ausente" entre a programação lógica (mas não o CLP) e o SQL que o ajudará a entender as coisas com mais clareza.

Como isso é mais sobre LP do que o CLP, posso ter perdido alguma coisa - se assim for, desculpe.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top