【问题标题】:Concating 2 lists with third list containing every different order of the elements of the 2 lists将 2 个列表与包含 2 个列表元素的每个不同顺序的第三个列表连接起来
【发布时间】:2020-04-18 18:19:12
【问题描述】:

所以我有 2 个列表,当连接时它应该返回如下所示的列表

| ?- concat([a,b,c],[1,2,3,4],X)。

X = [a,b,c,1,2,3,4] ;

X = [a,b,1,c,2,3,4] ;

X = [a,b,1,2,c,3,4] ;

X = [a,b,1,2,3,c,4] ;

X = [a,b,1,2,3,4,c] ;

...

所以我写了这段代码来回答这个问题:

concat([], Y, Y).
concat([E|X], Y, [E|Z]) :- concat(X,Y,Z).
   concat(X, Y, [Y|X]).

但我得到这个作为输出

?- concat([a,b,c],[1,2,3,4],X).

X = [a, b, c, 1, 2, 3, 4] ;

X = [a, b, c, [1, 2, 3, 4]] ;

X = [a, b, [1, 2, 3, 4], c] ;

X = [a, [1, 2, 3, 4], b, c] ;

X = [[1, 2, 3, 4], a, b, c]。

我是 Prolog 的新手,所以我不确定我哪里出错了,任何帮助都将不胜感激

【问题讨论】:

    标签: list prolog


    【解决方案1】:

    你的问题在第三行:

    concat(X, Y, [Y|X]).
    

    [Y|X] 不是Y 的所有元素后跟X 的所有元素的列表,它是一个列表,其第一个元素是列表Y,然后其余元素是X 的元素。

    我的代码如下:

    concat([], [], []).
    concat([E|X], Y, [E|Z]) :- concat(X,Y,Z).
    concat(X, [F|Y], [F|Z]) :- concat(X,Y,Z).
    

    concat([], Y, Y). 的第一行运行良好,但我认为作为归纳的基本情况,我的方式更简洁、更对称。

    【讨论】:

    • 谢谢你,我知道我现在哪里出错了。它还帮助我完成了我正在尝试的其他事情。
    猜你喜欢
    • 2015-08-18
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    相关资源
    最近更新 更多