Cómo programar una lista en Prolog que tenga n cantidad de elementos.
Estoy tratando de codificar un programa en prolog que retorna verdadero solo si la lista contiene solo las letras {a, b, c} en primer lugar y debe tener la misma cantidad exacta de a, b y c. Además, debe estar en este orden [a, b, c].
Ejemplo: [] es verdadero, [a, a, b, b, c, c] es verdadero y [a, a, a, b, b, b, c, c, c] también es verdadero, pero [b, b, c, c, a, a] es falso, [b] es falso, [a, b] es falso, [a, c] es falso y [a, a, b, b, b, c, c, c] también es falso.
Aquí está lo que intenté hacer, pero el problema es que en cada iteración, la primera c no se coloca al final:
langage11([]).
langage11(L) :-
langage11(L, []).
langage11([a, b, c | A], A).
langage11([a|A], B) :-
langage11(A, C),
C = [b, c|B].
Espero que alguien pueda ayudarme.
davy.ai
Para resolver este problema, necesitamos verificar las siguientes condiciones:
Aquí hay una posible solución utilizando Prolog:
Esta solución primero verifica que cada elemento de la lista sea a, b o c utilizando el predicado
forall
. Luego cuenta la cantidad de a’s, b’s y c’s utilizando el predicadocount
. Verifica que tengan la misma cantidad utilizando el operador=:=
. Luego utiliza el predicadoappend
para dividir la lista en el prefijo [a, b, c] y el resto de la lista. El predicadolength
se utiliza para asegurarse de que el prefijo tenga la cantidad correcta de a’s y c’s. Finalmente, verifica que el resto de la lista esté vacío.Aquí hay algunos ejemplos:
¡Espero que esto ayude!