【问题标题】:Check if list is the reverse of the other list in prolog检查列表是否与序言中的另一个列表相反
【发布时间】:2021-04-15 06:52:47
【问题描述】:

我正在尝试编写一个名为 flip(Lst1, Lst2) 的序言​​谓词,如果第一个列表与第二个列表相反,则该谓词成立,反之亦然。

例如:flip([a, b, c, d], [d, c, b, a]).flip([a], [a]). 都应该返回 true,而 flip([a, b], [b, c]). 应该返回 false。

我的第一个想法是反转第一个列表,然后将其与第二个列表进行比较,但我想知道是否有更有效的方法。

【问题讨论】:

  • 你写了什么?

标签: prolog


【解决方案1】:

刚刚发现这是可行的

flip([],[]).
flip([H|T],R) :- 
    flip(T,RevT),
    append(RevT,[H],R).

【讨论】:

    【解决方案2】:

    您可以为此使用 reverse 内置。

    flip(List1,List2):-
        reverse(List1,ReverseList),
        List2=ReverseList.
    

    示例:

    ?- flip([a,b,c],[c,b,a]).
    true
    
    ?- flip([c],[c]).
    true
    
    ?- flip([a,b,c],[c]).
    false
    
    ?- flip([],[]).
    true
    

    【讨论】:

    • 为什么不 flip(List1,List2):- reverse(List1,List2).
    • 可以不使用内置吗?
    猜你喜欢
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 2012-10-08
    • 1970-01-01
    相关资源
    最近更新 更多