Red de conocimiento informático - Aprendizaje de código fuente - Programación Zebra y Programación Cat

Programación Zebra y Programación Cat

Hay cinco casas, cada una de un color diferente. En él vive gente de diferentes países, cada uno tiene el suyo.

Tiene diferentes mascotas, le gustan diferentes bebidas y fuma diferentes marcas de cigarrillos. Ahora conocemos la siguiente información.

Un inglés vive en una casa roja.

El español tiene un perro.

El noruego vive en la primera casa de la izquierda.

A la gente de la casa amarilla le gusta fumar cigarrillos Coors.

El hombre que fuma cigarrillos Chesterfield y el hombre que cría zorros son vecinos.

El noruego vive al lado de la casa azul.

Winston Smoker tiene un caracol.

A las personas que fuman Lucky Strikes les gusta el zumo de naranja.

A los ucranianos les gusta tomar té.

El Parlamento del Humo de Japón.

El hombre que fuma cigarrillos Coors es vecino del hombre que cría caballos.

Las personas a las que les gusta el café viven en invernaderos.

La casa verde está a la derecha de la casa de marfil (a la derecha en la imagen).

A la gente de la casa del medio le gusta beber leche.

Con base en las condiciones anteriores, ¿en qué casas la gente tiene cebras y en qué casas le gustan las cebras?

¿Quieres beber agua? ¿O puedes poner todo en el lugar correcto?

Este es un problema condicional típico. En base a cada condición, podemos descartar algunas situaciones hasta encontrar finalmente la respuesta. Pero debido a que esta pregunta tiene demasiadas condiciones, responderla manualmente llevará un tiempo.

También podríamos aprovechar este tiempo para escribir un programa y dejar que la computadora responda la pregunta. Realmente, programar lleva tiempo.

¡El tiempo debe ser más corto que el cálculo manual!

Prolog se utiliza para resolver este tipo de problemas, generalmente utilizando el método "seleccionar y revisar". Es decir, una de las partes

Este método propone una serie de posibles soluciones, y luego la parte de verificación determina si la solución cumple con el significado del problema. Hasta que lo descubramos.

Hasta ahora.

Analicemos primero cuántas soluciones posibles hay.

Cada casa tiene un color diferente, así que en cuanto a colores ¡hay 5! Esta situación, y un * * * tiene cinco características: estricto color de piel, nacionalidad, mascotas, cigarrillos y bebidas. ¡Entonces un * * * tiene 5! *5 casos, es decir 600 casos. No mucho,

Puedes usar un programa para enumerarlos todos.

A continuación se describe cómo utilizar Prolog para escribir un programa de resolución.

En este programa, la estructura h(C, N, P, Y, D) se utiliza para almacenar información de la habitación. c, n, p, y, d corresponden a los colores respectivamente.

Nacionalidad, mascotas, cigarrillos y bebidas. Como hay cinco salas, se utiliza una lista para almacenar información de todas las salas.

. La lista es:

).

x = 5

x = 3

No

; Obviamente, a continuación encontramos el elemento adyacente al 4 en la lista. Los elementos enumerados aquí son simples.

Los números, si tienen la estructura mencionada anteriormente h(C, N, P, Y, D) que representa la información de la habitación, tienen el mismo efecto.

Como mencionamos anteriormente, usaremos el método "seleccionar y luego verificar" para encontrar la respuesta, entonces, ¿qué elegimos?

? Aquí se utilizará el predicado miembro/2 introducido anteriormente. ¿Recuerda la definición de miembro/2?

Miembro(A,).

Ya hemos dicho que los predicados de Prolog se pueden usar de muchas maneras, por lo que member/2 también se puede usar para recorrer una lista.

Todos los elementos.

-Miembro(X,).

x = 1;

x = 2;

x = 3;

x = 4; >x = 5;

No

Esta es exactamente la funcionalidad que necesitamos y podemos seleccionar todos los casos usándola.

Con los preparativos anteriores, puedes comenzar a escribir formalmente la parte de la respuesta. Primero enumeremos los procedimientos.

y luego explique. El predicado que resuelve el problema es solve/3 y se devuelve el primer parámetro x.

Lista de habitaciones, el segundo parámetro TT devuelve la habitación donde vive el dueño de la cebra, y el tercer parámetro TTT devuelve la persona a la que le gusta beber agua.

Sala de personas

Resolver (X, TT, TTT):-

% Primero, vincule X como una lista de habitaciones. Tenga en cuenta que las propiedades de la habitación no están definidas en este momento, por lo que se utilizan variables.

Representante.

X=[h(C1, N1, P1, Y1, D1), h(C2, N2, P2, Y2, D2), h(C3, N3, P3, Y3, D3), h (C4, N4, P4,

Y4, D4), h(C5, N5, P5, Y5, D5)],

% de los británicos viven en casas rojas.

Miembro(Z1,X), % primero selecciona una habitación Z1 de la lista X.

Color (z1, rojo), % el color de z1 es rojo.

Etnia (z1, británicos), las personas que viven en % z1 son británicos. Lo mismo a continuación.

El % de los españoles tiene perros.

Miembro (Z2, X),

Mascota (Z2, perro),

Etnia (Z2, español),

% de los noruegos viven en la primera casa a la izquierda.

Primero (Z3, X),

Etnia (Z3, noruego),

% de las personas en la casa amarilla les gusta fumar cigarrillos Coors.

Miembro (Z4, X),

Yan (Z4, Coors),

Color (Z4, amarillo),

% El hombre que fuma cigarrillos Chesterfield y el hombre que cría zorros son vecinos.

Miembro (Z5, X),

Mascota (Z5, zorro),

Siguiente (Z6, Z5, Z6, X) son iguales.

Yan (Z6, Chesterfield), el

% de los noruegos vive al lado de la casa azul.

Miembro(Z7,X),

Color(Z7,azul),

Siguiente(Z8,Z7,X),

Étnicos (Z8, noruegos),

% de los fumadores de Winston tienen caracoles.

Miembro (Z9, X),

Yan (Z9, Winston),

Mascota (Z9, caracol),

% de personas que fuman cigarrillos Lucky Strike como si fueran jugo de naranja.

A los miembros (Z10, p>

% de los ucranianos les gusta beber té.

Miembro (Z11, % Consejo Tabaco de Japón.

Miembro (Z12, X),

Nacionalidad (Z12, japonés),

Yan (Z12, Paramount),

% La persona que fuma cigarrillos Coors es el vecino del dueño del caballo.

Miembro (Z13, X),

Mascota (Z13, caballo),

Siguiente (Z14, Z13, X),

>Yan (Z14, Coors),

% de las personas a las que les gusta el café viven en invernaderos.

Miembro (Z15, X),

Color (Z15, verde),

Bebida (Z15, café),

% La casa verde está a la derecha de la casa de marfil (a la derecha en la imagen).

Miembro (Z16, X),

Color (Z16, marfil),

Siguiente (Z17, Z16, condición a la derecha, pero suponemos que son vecinos.

Hay dos respuestas finales.

Color (Z17, verde), modifíquelo usted mismo. Por supuesto, también debe escribir uno usted mismo para juzgar si es correcto.

Predicado.

A la gente de la casa del medio le gusta beber leche.

Medio (Z18, X),

Bebida (Z18, leche),

Exceder % son todas las condiciones. Comencemos a responder nuestras preguntas.

%Encuentra la habitación donde la mascota es una cebra.

Los miembros (TT, X),

Mascotas (TT, cebra),

% encuentran el salón para beber.

Miembro (TTT, X),

Bebida (TTT, agua).

No deberías tener problemas para leer este programa. Simplemente traduce nuestros términos directamente al

Tome el lenguaje Prolog como ejemplo:

% El hombre que fuma cigarrillos Chesterfield es vecino del hombre que cría zorros.

Miembro (Z5, X),

Mascota (Z5, zorro),

Siguiente (Z6, Z5, Z6, X) son iguales.

Yan (Z6, Chesterfield),

La descripción verbal es: primero Z5 es una casa, correspondiente al miembro (Z5, x); luego su mascota es un zorro.

, correspondiente a mascota (z5, zorro); su vecino es Z6, correspondiente al siguiente (Z6, Z5, X), finalmente, la persona en Z6 fuma.

Chesterfields, correspondiente a Yan (Z6, Chesterfields). Verá, siempre que la condición original se descomponga ligeramente,

se convierte en nuestro programa Prolog.

Jaja, cualquiera puede programar un espectáculo así. Ya ves las ventajas de Prolog. El prefacio es descriptivo.

Idioma, solo necesitas describir el problema una vez en lenguaje Prolog y dejar que la computadora haga el resto.

Por favor :). Si utiliza otros lenguajes, como C y Basic, debe pensar usted mismo en el flujo del programa.

Por eso estos lenguajes se denominan lenguajes procedimentales. Mucho más bajo que Prolog.

Bien, finalmente ejecutemos el programa.

-Resolver para (X, TT, TTT).

X = [h(amarillo, noruego, zorro, coors, agua), h(azul, ucraniano, caballo,

chesterfield, té),

h(rojo, británico, caracol, Winston, leche), h(iory, español, perro, 'golpe de suerte', 'jugo de naranja'),

h(verde, Japonés, cebra, parlamento, café)]

TT = h(verde, color japonés, color cebra, color parlamento, color café)

TTT = h(amarillo, noruego, zorro , coors, agua);

X = [h(amarillo, noruego, zorro, coors, agua), h(azul, ucraniano, caballo,

Chesterfield, té),

h (rojo, británico, caracol, Winston, leche), h (verde, japonés, cebra,

parlamento, café),

h(marfil, Español, perro, 'tiro de la suerte', 'jugo de naranja')]

TT = h(verde, color japonés, color cebra, color parlamento, color café)

TTT = h (amarillo, noruego, zorro, cursiano, agua)

No

Debido a que no usamos el límite correcto en la pregunta de la condición 13, hay dos respuestas. Puedes

Finalmente ver las dos habitaciones con estas dos respuestas, que simplemente están al revés.

Dedica un poco más de esfuerzo a escribir las respuestas de forma más bella y el programa será perfecto.