Para situar su función en línea func
al igual que el operador +
(junto con muchos otros), que necesita para definir un orden de precedencia para func
y sus argumentos. Puede lograr esto en SWI-PROLOG con op/3
.
Por ejemplo, la Directiva (código donde se utiliza func/2
anterior):
:- op(500,yfx,func).
Implementar func/2
, puede escribir un meta-intérprete de su idioma (es decir, se escribe un programa PROLOG que analiza expresiones plazo, incluyendo func
y los interpreta como desee), o si func/2
es estrictamente aritmética, se puede utilizar también como arithmetic_function/1 directiva, de la siguiente manera:
:- arithmetic_function(func/2).
Prueba esto con la siguiente definición para func/2
:
func(X, Y, Z) :-
Z is X + Y.
da, con su ejemplo:
?- A is (2 func 3) func (4 func (2+1)).
A = 12.
Ahora que en el manual de SWI Prolog dice que esta directiva está en desuso, ¿cómo sería una solución actualizada? Tx –
Sin estar seguro de por qué estaba obsoleto, es mejor que pregunte [Jan Wielemaker] (https://github.com/JanWielemaker) si realmente necesita saberlo. Según tengo entendido, todavía funciona, aunque haya quedado obsoleto ... ¿me equivoco? – sharky