Articles of prolog

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 […]

Integrando Prolog con C #

¿Alguien sabe de una buena (y preferiblemente gratis) forma de integrar Prolog y C #? Estoy buscando crear un dll Prolog o similar para llamar desde mi código administrado, y recuperar una respuesta una vez que todo el procesamiento se ha completado. Estoy buscando que sea predominantemente unilateral (c # llamadas Prolog). He visto esta […]

¿Cómo añado las listas en Prolog?

¿Cómo añado las listas en Prolog? He buscado en Internet y encontré esto (de http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/2_7.html ) append([X|Y],Z,[X|W]) :- append(Y,Z,W). append([],X,X). Entonces obtiene la Z quitando los elementos de [X|Y] en [X|W] . ¿Pero cómo añado dos listas? Ejemplo, appendlist([1,2],[3,4,5],X). El resultado será X = [1,2,3,4,5] . Además, no sé qué está pasando en la recursión. […]

Eliminar duplicados en la lista (Prolog)

Soy completamente nuevo en Prolog y estoy probando algunos ejercicios. Uno de ellos es: Escriba un conjunto de predicados (InList, OutList) que toma como entrada una lista arbitraria, y devuelve una lista en la que cada elemento de la lista de entrada aparece solo una vez. Aquí está mi solución: member(X,[X|_]). member(X,[_|T]) :- member(X,T). set([],[]). […]

gprolog: obteniendo un stacktrace después de una excepción

Mientras uso gprolog , a menudo tengo excepciones sin ningún tipo de números de línea o contexto como este: uncaught exception: error(instantiation_error,(is)/2) Sin ningún tipo de contexto. Sé que puedo trace pero me llevaría mucho tiempo depurarlo con trace ya que necesito ejecutar muchas cosas antes de llegar al lugar donde ocurre el error. ¿Alguna […]

Prolog solo elimina elementos únicos

Quiero devolver una lista que elimine todos los elementos únicos, por ejemplo remUniqueVals([1,1,2,2,3,4,4,5,6,6,6],Q). Q = [1,1,2,2,4,4,6,6,6]. Mi problema es que actualmente tengo un código que devuelve remUniqueVals([1,1,2,2,3,4,4,5,6,6,6],Q). Q = [1, 2, 4, 6, 6]. De modo que solo se devuelve la primera instancia de estos valores no exclusivos. Aquí está mi código: remUniqueVals([], []). remUniqueVals([Q1|RestQ],[Q1|Xs]) […]

Desbordamiento de stack en la regla de gramática de Prolog DCG: cómo manejar grandes listas de manera eficiente o perezosa

Estoy analizando un formato de archivo bastante simple que consiste en una serie de líneas, cada línea tiene algunos campos separados por espacios, que se ve así: l 0x9823 1 s 0x1111 3 l 0x1111 12 ⋮ Estoy usando SWI-Prolog. Este es el DCG que tengo hasta ahora: :- consult(library(pure_input)). load_trace(Filename, Traces) :- phrase_from_file(trace_file_phrase(Traces), Filename). […]