Articles of Prólogo

Prolog anexa con operador de corte

¿Qué problema puede ocurrir cuando usamos append with cut operator? append2([],L,L):-!. append2([H|T],L,[H|TL]):-append2(T,L,TL). He probado varias entradas diferentes, pero siempre tiene éxito. ?- append2([1,2],[5],L). L = [1, 2, 5]. ?- append2([1,2],[1,2],L). L = [1, 2, 1, 2]. ?- append2([],[1,2],L). L = [1, 2]. ?- append2([1,2],[],L). L = [1, 2].

Saber cuándo usar cut en prolog

Tomé un curso en el que aprendí un prólogo. No pude entender cómo / cuándo usar los cortes. Aunque tengo una idea general de los cortes, parece que no puedo usarlos correctamente. ¿Alguien puede explicarlo brevemente o dar un buen tutorial (que no sea learnprolognow.org) sobre “cortes” que puedan recomendar?

predicado “binario a número” reversible

¿Cuál es la mejor manera de convertir bits binarios (puede ser una lista de 0/1, por ejemplo) en números de una manera reversible. He escrito un predicado nativo en swi, pero ¿hay una mejor solución? Atentamente

Mezclar en prólogo

Estoy tratando de escribir un procedimiento en prolog donde si L1 = [1,2,3] y L2 = [4,5,6] luego L3 = [1,4,2,5,3,6] tan shuffle([1,2,3],[4,5,6],[1,4,2,5,3,6]) Tengo esto hasta ahora: shuffle([X],[Y],[X,Y]). shuffle([X|Xs],[Y|Ys],_) :- shuffle(Xs,Ys,Z), shuffle(X,Y,Z). Este es mi primer bash de escribir código de prólogo, así que todavía estoy tratando de entender la syntax, las reglas y todo. […]

Conversión de términos a átomos preservando los nombres de las variables en el prólogo YAP

¿Hay alguna forma de configurar YAP (y / o SWI Prolog) para que conserven nombres de variables en cualquier llamada a term_to_atom/2 ? Por ejemplo, cuando ejecuto esto: term_to_atom(member(X, [1,2]), A). Obtengo esta respuesta: A = ‘member(_131405,[1,2])’ Donde X ha sido reemplazado por su representación interna. Sin embargo, me gustaría obtener esta respuesta en su […]

lista de los valores en los nodos hoja del árbol binario T

List es la lista de valores en nodos hoja de un árbol binario y estoy tratando de encontrar la forma de generar solo eso. Esto me está dando todos los nodos pero necesito solo las hojas. lea(nil,[]). lea(t(X,L,R),[X|L]) :- lea(L,L1), lea(R,L2), append(L1,L2,L). Ejecutar esto me da: ?- lea(t(a,t(b,t(d,nil,nil),t(e,nil,nil)),t(c,nil,t(f,t(g,nil,nil),nil))), List). List = [a, b, d, e, […]

Usando una variable restringida con `length / 2`

Aquí está el problema: $ swipl Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 7.3.6-5-g5aeabd5) Copyright (c) 1990-2015 University of Amsterdam, VU Amsterdam SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. Please visit http://www.swi-prolog.org for details. For help, use ?- help(Topic). or ?- apropos(Word). […]

La notación del sucesor de Prolog produce un resultado incompleto y un ciclo infinito

Comienzo a aprender Prolog y aprendí por primera vez sobre la notación del sucesor. Y aquí es donde descubro cómo escribir los axiomas de Peano en Prolog. Ver la página 12 del PDF : sum(0, M, M). sum(s(N), M, s(K)) :- sum(N,M,K). prod(0,M,0). prod(s(N), M, P) :- prod(N,M,K), sum(K,M,P). Puse las reglas de multiplicación en […]

Eliminar vocales en una lista

Escriba un progtwig que elimine vocales ( String , NoVowelsString ) que elimine todas las vocales de una cadena dada. Hasta ahora tengo la vowel(X):- member(X,[a,e,i,o,u]) la condición vowel(X):- member(X,[a,e,i,o,u]) . Luego pensé en el que borra todos los elementos de la otra lista: delete2([],L1,L1). delete2([H|T],L1,L3) :- delete2(H,L1,R2), delete2(T,R2,L3). Así que al tener estos dos […]

Definición de un camino / sendero / caminata

Muchos predicados definen algún tipo de camino acíclico construido a partir de los bordes definidos a través de una relación binaria, bastante similar a la definición del cierre transitivo . Por lo tanto, se requiere una definición genérica. Tenga en cuenta que las nociones definidas en la teoría de grafos no coinciden fácilmente con lo […]