Soy nuevo en SWI-Prolog y sigo aprendiendo. Estoy creando un programa simple para solicitar el nombre completo del usuario y mostrar el resultado. Sin embargo, he tenido problemas para obtener un nombre completo de la entrada del usuario junto con espacios entre el nombre, el segundo nombre y el apellido de una sola entrada. Cuando trato de mostrar una salida que es solo el primer nombre, la salida es solo un código.
Esto es lo que escribí hasta ahora:
name:-nl,
write('Write your full name: '),read(FName),
write(FName).
Aquí está la entrada y la salida.
Prolog_Name_Program
Esta es la salida que quiero.
?- name.
Write your full name: First Middle Last.
First Middle Last
true.
Solución del problema
El objetivo read(X)
lee el siguiente término del flujo de entrada actual y lo unifica con X
. Para que el predicado lea correctamente un nombre completo, debe escribir ese nombre entre comillas simples y terminar la entrada con un punto. Por ejemplo:
?- name.
Write your full name: 'First Middle Last'.
First Middle Last
true.
También puede usar el predicado read_line_to_string/2
, en cuyo caso no se deben escribir las comillas ni el período:
name:-
nl,
write('Write your full name: '),
read_line_to_string(user_input, FName),
write(FName).
Ejemplo:
?- name.
Write your full name: First Niddle Last
First Niddle Last
true.
No hay comentarios.:
Publicar un comentario