Pregunta

Tengo el predicado m(L,L) Y quiero que devuelva la lista que toma. El código es este:

m([],[]).
m([H|T],[H|L]) :- m(T,L).

Cuando intento usarlo con este ejemplo:

m([1,2,3,4,5,6,7,8,9,10],L)

Entiendo esto como respuesta:

L = [1, 2, 3, 4, 5, 6, 7, 8, 9|...].

(Noté que si lo intento con menos elementos, está bien). ¿Por qué está sucediendo esto y la lista está inacabada?

¿Cómo puedo evitar esto?

Lo siento si es una pregunta realmente estúpida, pero he buscado en la web y no pude encontrar ninguna documentación que pueda ayudarme a entender ... ¡Gracias!

¿Fue útil?

Solución

La lista está terminada: la salida se está truncando para fines de visualización. Si escribe un predicado que imprime su lista, verá que está completo. Supongo que estás usando SWI Prolog, lo que significa que puedes consultar este enlace Para formas de cambiar la configuración de visualización.

Otros consejos

Tanto el bucle de consulta/respuesta de Toplevel como el depurador abrevian los términos largos y complejos. Hacen esto para evitar un sinfín de páginas de producción. De hecho, escriben usando write_term/3 que toma una lista de opciones como argumento. La lista de opciones para las respuestas impresas por Prolog Toplevel está en Prolog-Flag Toplevel_print_options y la del depurador está en debugger_print_options. Inicialmente, ambos tienen el valor dado a continuación:

?- current_prolog_flag(toplevel_print_options, X).

X = [quoted(true), portray(true), max_depth(10), spacing(next_argument)].

Para cambiar la configuración predeterminada: agregue una directiva set_prolog_flag/2 en su archivo de inicialización personal prolog (consulte Plinicialización) para cambiar el valor predeterminado de las banderas Prolog mencionadas anteriormente.

Solo ve al settings -> user init file ... ->

Y cambie max_depth (10) así:

 :- set_prolog_flag(toplevel_print_options,
             [quoted(true), portray(true), max_depth(100)]).

También hay otras opciones que puede usar en Plinicialización archivo que ya se comentan.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top