list - Prolog:通过read/1向列表添加元素

标签 list input prolog

我正在尝试使用 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/

相关文章:

java - 在 RecyclerView 中显示列表

python - 在整数列表中查找最长的 0 序列

javascript - 输入文本的 JQuery 值不能用作参数

list - 如何添加和比较列表中的成员

css - 内部链接 <li> 无效

java - 浏览多个列表以查找相等的对象

css - webkit 浏览器中输入元素的垂直填充无效

javascript - 如何获取JQuery中存储的数据值?

prolog - 使用 Prolog 查找组合而不是对的排列

大小为 n 的列表的 Prolog 子群