es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Prolog cómo obtener números adyacentes en una regla

Muy nuevo en Prolog, de todas formas

Tengo una base de datos con nombres, números de calle y direcciones.

habite('Nombre', Num, 'Dirección').

Quiero crear una regla voisins(X,Y) que devuelva los nombres de las personas con la misma dirección que Y, pero con Num siendo Num o sus adyacentes (Num+1) y (Num-1).

Intenté hacer lo siguiente

voisins(X,Y) :-
    habite(X,Num,Dirección),
    ANum is Num+1,
    habite(Y,ANum,Dirección);
    BNum is Num-1,
    habite(Y,BNum,Dirección).

y también probé

voisins(X,Y) :-
    habite(X,Num,Dirección),
    ANum is Num+1,
    BNum is Num-1,
    habite(Y,ANum,Dirección),
    habite(Y,ANum,Dirección).

Ambos no funcionan. Siento que esto tiene una respuesta muy simple, pero soy muy nuevo en Prolog, por lo que realmente no lo sé. Agradezco cualquier ayuda.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener la salida deseada, puedes usar el siguiente código:

    voisins(X,Y) :-
        habite(X,Num,Dirección),
        habite(Y,OtroNum,Dirección),
        (Num = OtroNum ; Num = OtroNum+1 ; Num = OtroNum-1),
        X \= Y.
    

    Aquí, primero hacemos coincidir la dirección Dirección de la persona Y. Luego, hacemos coincidir la dirección Dirección de alguna otra persona X, junto con su Num. Finalmente, verificamos si Num es igual a OtroNum, o es exactamente uno mayor o uno menor que OtroNum. Además, nos aseguramos de que X y Y sean diferentes. De esta manera, la regla devolverá todas las X que coincidan con las condiciones anteriores para un determinado Y.

    ¡Espero que esto sea de ayuda!

Comments are closed.