es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Comparar la entrada del usuario con el predicado definido.

Estoy tratando de crear un juego de “Adivina Quién” (parte de adivinar a la persona).

Me gustaría verificar si la entrada del usuario es igual al valor/persona que está guardado en un predicado.
En base a esto, luego le diría al usuario si se ha adivinado el valor/persona o no.

La persona aleatoria se elige de una lista llamada characters cada vez que se regresa al menú de la interfaz de usuario.

¿Qué biblioteca debo usar o cómo puedo lograr este tipo de evaluación?

:- dynamic xxxxxxxxxxxx/1.

% características de una persona/personaje
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
male(bill).
male(alfred).

female(claire).
female(anne).

bald(bill).
beard(bill).
beard(alfred).
blushes(bill).
redshirt(alfred).
hat(claire).
blond(claire).
dress(anne).
earrings(anne).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

chosen_character(_) :- fail.

menu :-
    write('Posibles personajes para elegir:'), nl,
    characters(L), write(L), nl,
    read(Input),
    % CÓDIGO QUE COMPARA LA ENTRADA CON 'chosen_character' Y DEVUELVE EL NOMBRE SI ES CORRECTO, DE LO CONTRARIO, ADVIERTE DE NUEVO.
    menu.

character(L) :- findall(X, (male(X) ; female(X)), L).

new_character(Ans) :-
    characters(L),
    length(L, X),
    R is random(X),
    N is R+1,
    random_between(L, N, Ans),
    chosen_character(Ans).

random_between([H|_], 1, H).

random_between([_|T], N, E) :-
    N1 is N-1,
    random_between(T, N1, E1),
    E = E1.
Tags:  

Answer

  1. Avatar for davy.ai

    Para comparar la entrada del usuario con el carácter elegido y determinar si el pronóstico es correcto o no, puedes utilizar el predicado incorporado “==” para comprobar si dos términos son equivalentes. También puedes usar los predicados “write” y “nl” para devolver el resultado a la interfaz de usuario.

    Aquí tienes un ejemplo de cómo puedes modificar el predicado “menu” para lograr esto:

    menu :-
        write('Personajes posibles para elegir: '),nl,
        personajes(L), write(L),nl,
        read(Input),
        (personaje_elegido(Personaje), Personaje == Input ->
            write('¡Adivinaste! El personaje es '), write(Input), nl;
            write('Lo siento, ese no es el personaje correcto. ¡Inténtalo de nuevo!'), nl),
        menu.
    

    En este código, primero utilizamos el predicado “personaje_elegido” para obtener el carácter que se eligió al azar. Luego utilizamos el predicado “==” para comparar la entrada del usuario con el personaje elegido. Si son iguales, utilizamos el predicado “write” para devolver un mensaje diciendo que el pronóstico fue correcto y el nombre del personaje. Si no son iguales, devolvemos un mensaje diciendo que el pronóstico fue incorrecto y pedimos al usuario que lo intente de nuevo.

    Ten en cuenta que asumimos que “personaje_elegido” es un predicado que establece el personaje elegido como un hecho en la base de conocimientos. Puedes modificar este código para que coincida con la implementación real de “personaje_elegido” en tu programa.

    No necesitas ninguna biblioteca para lograr este tipo de evaluación, ya que la funcionalidad está disponible en los predicados incorporados.

Comments are closed.