Ho trovato questa risposta su StackOverflow molto chiara per spiegare la differenza tra il paradigma della programmazione logica e il paradigma della programmazione funzionale:
The thing that makes logical
append
different [from the functional one] is you can use it to compute the list that results from appending one list onto another, but you can also use it to compute the list you'd need to append onto the end of another to get a third list (or whether no such list exists), or to compute the list to which you need to append another to get a third list, or to give you two possible lists that can be appended together to get a given third (and to explore all possible ways of doing this).
Quello che mi sto chiedendo è come l'Unfication usata per mappare le variabili non vincolate ai valori in Programmazione logica si riferisce alla sintassi in Programmazione funzionale per creare la comprensione delle liste.
vale a dire. in Haskell puoi scrivere qualcosa come [(i,j) | i <- [1..10], j <- [5..20], j < i]
e Haskell restituisce un elenco di tutti i possibili valori di i
e j
che aderiscono a j < i
. Prendendo solo il capo di questa lista (se esiste) mi sembra di fare esattamente lo stesso comportamento di quello che farebbe Prolog (e simili linguaggi di programmazione logica), quando viene dato un predicato in cui un numero dovrebbe essere più piccolo dell'altro.
È vero o no?