sto sperimentando core.logic, e si vuole abilitare il mio tipo di dati personalizzato a partecipare nelle espressioni logiche:Estendere core.logic per i tipi personalizzati
(deftype Expression [node vars]
....)
Fondamentalmente questo rappresenta un nodo in un albero di espressione matematica, contenente un albero dei nodi e un insieme di variabili non associate utilizzate. node
è una costante, un simbolo o un nodo albero (Operator Expression Expression....)
. Mi piacerebbe essere in grado di utilizzare core.logic per manipolare espressioni matematiche e confrontarmi con sottoalberi di tali espressioni.
Come posso fare questo, se possibile?
vedo dal codice sorgente core.logic che ci sono un number of protocols che sembrano sarebbe bene estendere (ad esempio IUnifyTerms
, IReifyTerms
ecc), ma non è del tutto chiaro come questi sono tutti destinati ad essere utilizzati, e quali ho davvero bisogno di estendere.
Potresti essere interessato a Sistemi di riscrittura dei termini. Ho scoperto che esaminare le implementazioni esistenti di quello che stai tentando è stato fruttuoso (Maude, Stratego/XT sono belle). Inoltre, tieni presente che potresti incontrare il problema di abbinamento commutativo-associativo; un sottoproblema computazionalmente impegnativo che le macchine core.logic esistenti non supporterebbero particolarmente bene (l'ultima volta che ho controllato comunque). – MRocklin