我正在尝试使用 add_read_list/2 将用户输入添加到列表中,直到单词“end”。遇到。输出应该是这样的:
add_read_list(Resultlist, [a,b]).
|: c.
|: d.
|: e.
|: f.
|: end.
Resultlist = [f,e,d,c,a,b].
这就是我已经走了多远:
add_read_list(Resultlist,Entrylist) :-
read(end), append([], Entrylist, Resultlist).
add_read_list(Resultlist, Entrylist) :-
read(Input), append([Input], Entrylist, X),
add_read_list(Resultlist, X).
但是这样每隔一个输入就会被跳过:
add_read_list(Resultlist, [a,b]).
|: c.
|: d.
|: e.
|: f.
|: end.
Resultlist = [f,d,a,b].
我做错了什么?
最佳答案
删除第一个子句,并使用简单的“if/then/else”结构:
add_read_list(Resultlist, Entrylist) :-
read(Input),
( Input = end
-> reverse(Resultlist, Entrylist)
; add_read_list(Resultlist, [Input|Entrylist])
).
不是附加读取的每个项目,而是对其进行“cons”,并在完成后反转完整列表(好吧,只需统一以后进先出的方式获取列表,这似乎是必需的。即而不是 reverse(Resultlist, Entrylist)
, 结果列表 = 条目列表
)
关于list - Prolog:通过read/1向列表添加元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27342014/