在SWI-Prolog中交换列表的开头和结尾

时间:2016-04-25 02:27:30

标签: list prolog swap

好的,所以我想在SWI-Prolog中编写代码。我应该交换列表的开头和结尾(在中间元素处断开)。对于偶数尺寸列表,我发现它很简单,但对于奇数,我遇到了麻烦。

    :- use_module(library(lists)).
    swap(L, Swapped) :-
        same_length(L, Swapped),
        length(L, S),
        (   mod(S, 2) =:= 0 
        ->  divi(L, A, B)
        ;   nth1(S, L, X, R),
            divi(R, A, Las),
            append(Las, X, B)
        ),
        append(B, A, Swapped).


    divi(L, A, B) :- 
        length(L, N), 
        Half is N div 2, 
        length(A, Half), 
        length(B, Half), 
        append(A, B, L).

*编辑 - 我使用nth1来删除中间元素,尝试将其带到一个偶数大小的列表并交换,但我的输出始终为false。

以下是我如何输入

的示例
?-swap([1,2,3,4],Swapped).

测试时需要更改列表的数量和大小。

0 个答案:

没有答案