Ho letto un breve articolo su Prolog e programmazione logica. Sono curioso di sapere se il programma logico può fare l'algebra. Come potresti essere in grado di chiedere quale sia la variabile di X nell'equazione 5 + X = 7 e ottenere una risposta di -2?Sono curioso di sapere se il programma logico può fare l'algebra
risposta
Che ne dici di questo? Si noti che questo funzionerà solo per X+Y=Z
.
equation(X,Y,Z):- var(X),X is Z-Y.
equation(X,Y,Z):- var(Y),Y is Z-X.
equation(X,Y,Z):- var(Z),Z is X+Y.
Si può chiedere:
equation(5,X,7).
X = 2 .
?- equation(2,5,X).
X = 7.
?- equation(X,5,7).
X = 2
Tutti i sistemi di gravi Prolog forniscono programmazione logica vincoli su domini finiti, denominato CLP (FD) in breve, con cui è possibile risolvere molti tali equazioni facilmente. Ad esempio, con SICStus Prolog, SWI e Yap:
?- use_module(library(clpfd)).
true.
?- 5+X #= 7.
X = 2.
A quanto pare, la risposta è 2 invece di -2. Controlla anche la programmazione della logica dei vincoli su altri domini, come i razionali con la libreria (clpq).
Sì, il Prolog può fare l'algebra.
Se si utilizza Google per Prolog e CAS (Computer algebra system) otterrete molti risultati.
ad es. Using Prolog as a CAS
Se si capisce che Prolog = Syntactic unification + backward-chaining + REPL,
poi rendersi conto che è l'unificazione che è il cuore di risolvere i problemi/equazioni, si può incorrere in un ragionamento equazionale che viene utilizzato per la risoluzione problemi che contengono equals (=). Questa stessa logica viene anche utilizzata con automated theorem provers e proof assistants.
Se si guarda here si troverà prolog.ml che implementa l'unificazione e il concatenamento in avanti in questo dimostratore di teoremi automatico.
Si consiglia inoltre di verificare term rewriting e cercare Google per la riscrittura dei termini per ulteriori informazioni sulla scienza di risolvere le equazioni utilizzando termini.
Puntatori molto carini! Renderebbe la tua risposta ancora più utile se riesci a riassumere brevemente questi concetti prima di dare dei suggerimenti per ulteriori informazioni. – crackjack
Vedere [ottimizzazione] (http://stackoverflow.com/questions/37142066/optimisation-in-swi-prolog) per un approccio che funziona anche con equazioni non lineari (a volte). – mat
Esiste un'implementazione di un [equation simplifier in Prolog] (http://cmu-ai-mirror.bvulpes.com/afs/cs/project/ai-repository/ai/lang/prolog/code/math/algebra/ 0.html) che è stato scritto nel 1987. Ho anche trovato un'implementazione più recente dell'algoritmo di completamento [Knuth-Bendix] (https://github.com/nick8325/completion) in Prolog. –