list - Prolog 中的反转列表

标签 list prolog reverse

我从序言开始,作为练习,我尝试反转列表。

例如,inv([1,2,3], S) 应给出 S = [3,2,1]。 以下是我和合作伙伴已经完成的工作:

conc([], L, L).
conc([X|L1], L2, [X|L3]) :- conc(L1, L2, L3).

tail([X|Y], S) :- conc([], Y, S).

inv([X|Y], S) :- tail([X|Y], TAIL), inv(TAIL, R_TAIL), conc(R_TAIL, X, S).
inv([], []).

前三行工作正常。但真的不明白最后两个发生了什么,因此如何解决它。 我只想找到列表的尾部(当我只使用tail函数时,这是有效的),反转它,然后将其附加到列表的头部。 你们能帮帮我吗?

最佳答案

基于foldl/4的替代解决方案:

prepend_element(E, L, [E|L]).

inv(List, Reversed) :-
    foldl(prepend_element, List, [], Reversed).

关于list - Prolog 中的反转列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46858898/

相关文章:

c - C 中删除列表节点的这一段是什么意思

z-index - 根据页面呈现顺序反转 z-index

python - 如何在 python 中反转正则表达式?

c# - ServiceStack 是否支持反向路由?

generics - 序言中的 "Generic programming"

prolog - 如何在有限状态机 Prolog 中找到无用状态

python - 将行添加到 pandas 中的数据框

list - Prolog 谓词将检查列表 A 是否是列表 D 的前缀和的列表

java - 我可以用 Arrays.asList 创建一个数组列表吗?

prolog - SWI-Prolog 中未定义的过程