Al fine di inquadrare la funzione func
linea proprio come l'operatore +
(insieme a molti altri), sarà necessario definire un ordine di precedenza per func
ed è argomenti. È possibile ottenere questo in SWI-PROLOG con op/3
.
Ad esempio, la direttiva (precedente codice in cui viene usato func/2
):
:- op(500,yfx,func).
Per implementare func/2
, è possibile scrivere un meta-interprete per la lingua (ad esempio, si scrive un programma PROLOG che analizza espressioni scadenza, in particolare func
e li interpreta come lo si desidera), o se func/2
è strettamente aritmetico, è possibile utilizzare arithmetic_function/1 anche come una direttiva, come segue:
:- arithmetic_function(func/2).
Test questo con la seguente definizione per func/2
:
func(X, Y, Z) :-
Z is X + Y.
dà, con il tuo esempio:
?- A is (2 func 3) func (4 func (2+1)).
A = 12.
Ora che nel manuale di SWI Prolog si dice che questa direttiva è deprecata, come sarebbe una soluzione aggiornata? Tx –
Non so perché fosse deprecato, meglio chiedere a [Jan Wielemaker] (https://github.com/JanWielemaker) se è davvero necessario saperlo. La mia comprensione è che funziona ancora, anche se è stato deprecato ... mi sbaglio? – sharky