2012-12-03 21 views

risposta

3

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 
11

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).

+0

Vedere [ottimizzazione] (http://stackoverflow.com/questions/37142066/optimisation-in-swi-prolog) per un approccio che funziona anche con equazioni non lineari (a volte). – mat

+0

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. –

4

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.

+0

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