gpt4 book ai didi

list - 如何将用户控制台输入到 Prolog 列表中

转载 作者:行者123 更新时间:2023-12-05 01:37:41 24 4
gpt4 key购买 nike

我正在尝试将用户输入写入列表,但遇到了两个问题。使用此代码

getInput([Symptom|List]):-
writeln('Enter Element:'),
read(Symptom),
dif(Symptom,stop),
getInput(List).
getInput([]).

我能够从用户那里得到症状,但输出显示第一个用户输入为头,其他用户输入为尾。如何制作头部“症状”并仅将用户输入广告到尾部?其次,当我将“停止”更改为“完成”时,程序不再停止?

所以有人告诉我“Done”不起作用,因为它是大写的。如果我想使用大写单词,我该怎么做?

最佳答案

这行得通

get_symptoms(Symptoms) :-
write('Enter Symptom: ' ),
read_string(user, "\n", "\r", _, Response),
(
Response == "Stop"
->
Symptoms = []
;
get_symptoms(Symptoms0),
Symptoms = [Response|Symptoms0]
).

用途
1. ==/2而不是 dif/2 .
2. read_string/5而不是 read/1以便可以输入字符串。
3. write/1而不是 writeln/1以便输入与提示位于同一行。
4. ->/2而不是单独的条款。

您可以将退出词的值更改为“停止”以外的值,您甚至可以使用单个字符,如“.”如果你愿意。

另请注意,这不需要剪切 (!)。

运行示例:

?- get_symptoms(List).
Enter Symptom: Stop
List = [].

?- get_symptoms(List).
Enter Symptom: A
Enter Symptom: Stop
List = ["A"].

?- get_symptoms(List).
Enter Symptom: a
Enter Symptom: A
Enter Symptom: A line with some spaces
Enter Symptom: Notice that a period is not needed at the end
Enter Symptom: Stop
List = ["a", "A", "A line with some spaces", "Notice that a period is not needed at the end"].

How do I make the Head "Symptoms" and only add the user input to the Tail?

您想让用户输入头部并将以下条目作为尾部。这个例子的技巧是将列表构造函数 |/2 放在递归调用之后,例如

    get_symptoms(Symptoms0),           % Recursive call
Symptoms = [Response|Symptoms0] % List constructor

Secondly, when I change "stop" to "Done" the program no longer stops?

由于 Done 以大写字母开头,因此它是导致问题的 Prolog 变量。 stop 以小写字母开头,是一个原子,因此可以按预期进行比较。

If I want to use a capital word, how would I do that?

您可以使用 read/1这要求用户在输入值时输入“”,例如

?- read(X).
|: "Hello".

X = "Hello".

但是read/1读取术语因此要求用户不仅添加双引号而且以句号结尾。使用 read_string/5允许用户按照他们的期望输入数据。输入将被读取并存储为字符串。如果要转换数据,则存在对 strings 进行操作的谓词

关于list - 如何将用户控制台输入到 Prolog 列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54677190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com