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.
davy.ai
Para obtener la salida deseada, puedes usar el siguiente código:
Aquí, primero hacemos coincidir la dirección
Dirección
de la personaY
. Luego, hacemos coincidir la direcciónDirección
de alguna otra personaX
, junto con suNum
. Finalmente, verificamos siNum
es igual aOtroNum
, o es exactamente uno mayor o uno menor queOtroNum
. Además, nos aseguramos de queX
yY
sean diferentes. De esta manera, la regla devolverá todas lasX
que coincidan con las condiciones anteriores para un determinadoY
.¡Espero que esto sea de ayuda!