如何从 SWI-Prolog 中的用户输入中获取全名并将其显示为输出?

How to get a full name from user input in SWI-Prolog and display it as an output?

我是 SWI-Prolog 的新手,仍在学习中。我正在制作一个简单的程序来询问用户的全名并显示输出。但是,我一直在努力研究如何从用户输入中获取全名以及从单个输入中获取名字、中间名和姓氏之间的空格。当我尝试显示只有名字的输出时,输出只是一个代码。

这是我到目前为止写的:

name:-nl,
write('Write your full name: '),read(FName),
write(FName).

这是输入和输出。 Prolog_Name_Program

这是我想要的输出。

?- name.
Write your full name: First Middle Last.
First Middle Last
true.

目标 read(X) 从当前输入流中读取下一个 term 并将其与 X 统一。为了使谓词正确读取全名,您需要键入该名称 用单引号 括起来并以 句点 结束输入。例如:

?- name.

Write your full name: 'First Middle Last'.
First Middle Last
true.

您也可以使用谓词 read_line_to_string/2,在这种情况下不应输入引号和句点:

name :-
    nl,
    write('Write your full name: '),
    read_line_to_string(user_input, FName),
    write(FName).

示例:

?- name.

Write your full name: First Niddle Last
First Niddle Last
true.

我刚刚发现了解决方案,它非常简单。全名是字符的组合,因此我需要在输入的名称的开头和结尾加上单引号。不知道是我孤陋寡闻,还是感觉这种东西在其他攻略里很少解释。

输入应如下所示。

?- name.
Write your full name: 'First Middle Last'.
First Middle Last
true.