Articles of prolog

Cómo contar el número de ocurrencias de elementos en una lista en Prolog

soy nuevo en prólogo por eso es posible que la pregunta sea fácil para ti pero no pude encontrar la respuesta. ¿Puede alguien por favor ayudarme? sólo quiero una función de conteo st count([c,c,a,a,b,b,d,a,c,b,d,d,a], O). Devolverá el número de ocurrencias de los miembros de la lista. O = [[a, 4], [b, 3], [c, 3], [d, […]

Recoge todas las soluciones “mínimas” de un predicado

Teniendo en cuenta los siguientes hechos en una base de datos: foo(a, 3). foo(b, 2). foo(c, 4). foo(d, 3). foo(e, 2). foo(f, 6). foo(g, 3). foo(h, 2). Quiero recostackr todos los primeros argumentos que tienen el segundo argumento más pequeño, más el valor del segundo argumento. Primer bash: find_min_1(Min, As) :- setof(BA, foo(A, B), [Min-_|_]), […]

Lea un archivo línea por línea en Prolog

Me gustaría leer un archivo de texto sin formato y aplicar un predicado a cada línea (los predicados contienen write que hace la salida). ¿Como podría hacerlo?

Intersección y unión de 2 listas

Estoy comenzando a aprender prólogo (uso SWI-prolog) e hice un ejercicio simple en el que tengo 2 listas y quiero calcular su intersección y unión. Aquí está mi código que funciona bastante bien, pero me preguntaba si hay una mejor manera de hacerlo, ya que no me gusta usar el operador CUT . intersectionTR(_, [], […]

Dividir una lista de enteros en una lista de enteros positivos y una lista de enteros negativos

He estado intentando crear un predicado en Prolog que divide una lista de enteros en una lista de enteros positivos y en una lista de enteros negativos. Consulta de muestra con resultado esperado: ?- split([1,-2,3,4,-8],X,Y). X = [1,3,4], Y = [-2,-8]. Este es el código que obtuve hasta ahora: split([], [], []). split([Head|Tail], List1, List2) […]

Significado de los indicadores del modo instanciación en argumentos de predicados Prolog

En cuanto a la documentación de Prolog, las firmas de predicados a veces se escriben de la siguiente manera: foo(:Bar, +Baz, -Qux, ?Mop) ¿Qué son : + , – y ? para y cómo los interpreto? Además, ¿son estos los únicos que existen o hay más de ellos?

Segregando listas en Prolog

Me está costando mucho trabajo entender cómo obtener mi código para mostrar mis listas segregadas que constan de números pares e impares. Ni siquiera estoy seguro de lo que me falta de comprensión. Soy nuevo en este lenguaje obviamente y debo usarlo para la escuela. Mi mente imperativa y funcional no me deja saber qué […]

Pruebas de tipo más seguras en Prolog

ISO-Prolog (ISO / IEC 13211-1: 1995 que incluye Cor.1: 2007, Cor.2: 2012) ofrece los siguientes predicados incorporados para probar el tipo de un término: 8.3 Prueba de tipo 1 var / 1. 2 átomos / 1. 3 entero / 1. 4 flotador / 1. 5 atómico / 1. 6 compuesto / 1. 7 nonvar / […]

Usando \ == / 2 o dif / 2

Si quiero asegurarme de que dos variables no crean instancias con el mismo término, ¿cuál es la forma preferida de hacerlo? Digamos que necesito encontrar los bordes dirigidos en un gráfico, y un nodo no puede tener un borde en sí mismo: node(a, x, y). node(b, z, x). node(c, y, y). (los bordes aquí son […]

Acoplar una lista en Prolog

Solo he estado trabajando con Prolog por un par de días. Entiendo algunas cosas, pero esto realmente me confunde. Se supone que debo escribir una función que toma una lista y la aplana. ?- flatten([a,[b,c],[[d],[],[e]]],Xs). Xs = [a,b,c,d,e]. % expected result La función elimina las estructuras internas de la lista. Esto es lo que tengo […]