Ho un tipo di dati standard che rappresenta le formule della logica dei predicati. Una funzione che rappresenta una regola di eliminazione deduzione naturale per la disgiunzione potrebbe essere simile:La funzione restituisce "Nessuna soluzione" invece di "Niente"
d_el p q =
if p =: (Dis r s) && q =: (Neg r) then Just s else
if q =: (Dis r s) && p =: (Neg r) then Just s else
Nothing where r,s free
x =: y = (x =:= y) == success
Invece di valutare a nulla quando l'unificazione fallisce, la funzione restituisce soluzioni in PACKS
:
logic> d_el (Dis Bot Top) (Not Bot)
Result: Just Top
More Solutions? [Y(es)/n(o)/a(ll)] n
logic> d_el (Dis Bot Top) (Not Top)
No more solutions.
Quello che mi manca, e perché lo el
non viene valutato a Nothing
quando l'unificazione non riesce?
Il linguaggio che sto utilizzando è Curry, un langauge programmazione funzionale-logica (vedi tag). – danportin
oh - scusa .... l'ignoranza può essere abbastanza imbarazzante .... – Carsten
Come probabilmente sapete, "curry" è anche un termine che ha significato in altre lingue (come Haskell, ovviamente) quindi forse dovreste [ aggiungi del contenuto alla pagina wiki Overflow dello stack per il tag 'curry'] (http://stackoverflow.com/edit-tag-wiki/45806). – MatrixFrog