En la práctica 1 se implementarán ejemplos en un pequeño intérprete de Prolog implementado en Lisp.
Algunas de las dudas surgidas sobre los predicados y su resolución son:
1.- El ejercicio 1.2.c debe funcionar para (subconjunto (1 1) (3 1 2)) puesto que el conjunto {1} podría estar igualmente representado tanto por las lista (1), como por la lista (1 1), como por cualquier lista cuyos elementos sean todos 1. De la misma manera, el conjunto {1, 2} podría, en esta representación simple basada en listas, estar representada tanto por (1 2) como por (2 1). Por lo tanto, como puede verse, existen dos niveles identificables como el del TAD conjunto y el de su representación usando listas.
2.- El predicado 2.2.c de fusión ordenada debe funcionar con listas no ordenadas y el resultado no necesariamente estará ordenado. El resultado de fusionar las listas (1 2 3 4) y (4 3 2 1) será (1 2 3 4 4 3 2 1), el resultado de fusionar (1 2 4 3) (4 3 1 2) es (1 2 4 3 4 3 1 2) y el de fusionar (1 2 3) con (2 4 3) es (1 2 2 3 4 3). La división y fusión "ordenada" reiterativa de secuencias es la base del antiguo algoritmo de Feygen, usado para la ordenación de datos en soporte de cinta magnética.
3.- El máximo de una lista, predicado 2.2.a, debe funcionar para cualquier tipo de lista con cualquier ordenación de elementos y no sólo para listas ordenadas. |