start :- accion(estado(izquierda,izquierda,izquierda,izquierda), estado(derecha,derecha,derecha,derecha)). accion(Inicio,Objetivo):- plan(Inicio,Objetivo,[Inicio],Camino), nl,write(‘Solución:’),nl, write_camino(Camino). % write_camino(Camino), fail. % Todas las soluciones se imprimen plan(Inicio,Objetivo,Visitado,Camino):- ir(Inicio,Siguiente), seguro(Siguiente), \+ member(Siguiente,Visitado), % not(member(…)) plan(Siguiente,Objetivo,[Siguiente|Visitado],Camino). plan(Objetivo,Objetivo,Camino,Camino). ir(estado(X,X,Z,K),estado(Y,Y,Z,K)):-al_otro_lado(X,Y). % granjero, lobo ir(estado(X,W,X,K),estado(Y,W,Y,K)):-al_otro_lado(X,Y). % granjero, cabra ir(estado(X,W,Z,X),estado(Y,W,Z,Y)):-al_otro_lado(X,Y). % granjero, col ir(estado(X,W,Z,K),estado(Y,W,Z,K)):-al_otro_lado(X,Y). % granjero al_otro_lado(izquierda,derecha). al_otro_lado(derecha,izquierda). seguro(estado(B,W,Z,K)):- al_otro_lado(W,Z), al_otro_lado(Z,K). seguro(estado(B,B,B,K)). seguro(estado(B,W,B,B)). “` * . . . Read more
Cómo puedo encontrar: 1) el número de círculos que contienen al menos 1 mujer? 2) los nombres de las personas que se encuentran en más círculos. círculo(círculo1, [misha, inna]). círculo(círculo2, [misha, inna, igor, ivan]). círculo(círculo3, [vasya, stepan]). género(misha, hombre). género(inna, mujer). género(igor, hombre). género(ivan, hombre). género(vasya, hombre). género(stepan, hombre).
Necesito seleccionar una sublista de la lista, desde el índice K hasta el índice N. Ejemplo: ?- sublist(2, 5, [1, 2, 3, 4, 5, 6, 7, 8, 9], Res) Res = [2, 3, 4, 5]
He definido la siguiente red: connected(d,f). connected(d,a). connected(d,b). connected(d,c). connected(c,a). connected(c,b). connected(c,e). connected(b,e). connected(X,Y) :- edge(X,Y). connected(X,Y) :- edge(Y,X). Necesito encontrar todos los caminos entre dos nodos especificados y escribirlos. He encontrado una publicación anterior que proporciona una forma de verificar si hay un camino entre dos nodos, pero no . . . Read more
Estoy escribiendo pruebas utilizando la herramienta PlUnit de SWI-Prolog y me gustaría proporcionar un mensaje de error más claro, tal vez comparando lo que obtuve con lo que esperaba. El siguiente ejemplo mínimo funcional (MWE, por sus siglas en inglés) ejemplifica lo que busco: :- module(mwe, [parse_int/2]). parse_int(Str, Num) :- . . . Read more