Prolog 序言,用适当的括号列出结果

Prolog 序言,用适当的括号列出结果,prolog,Prolog,我想知道如何得到一个很好的适当的元素,我有看清单!我一直在尝试查找这方面的资料,但我发现的实际例子似乎都不起作用 以下是我在网上找到的一种方法: create_list(Item, List, [Item|List]). 如果我运行此查询: Hi = [1,2], Hey = [3,4], create_list(Hi, Hey, Output). 结果变得很奇怪: Output = [[1,2], 3,4] 括号都错了! 应该是: [[1,2], [3,4]] 括号都错了!应该是: [

我想知道如何得到一个很好的适当的元素,我有看清单!我一直在尝试查找这方面的资料,但我发现的实际例子似乎都不起作用

以下是我在网上找到的一种方法:

create_list(Item, List, [Item|List]).
如果我运行此查询:

Hi = [1,2], Hey = [3,4], create_list(Hi, Hey, Output).
结果变得很奇怪:

Output = [[1,2], 3,4]
括号都错了! 应该是:

[[1,2], [3,4]]
括号都错了!应该是:

[[1,2], [3,4]]
这是因为您的
create_list
使用
[Item | list]
。如果希望
[3,4]
周围的括号保持不变,请将
[Item | List]
替换为
[Item,List]
。当然,
List
现在的含义不正确,所以我将其重命名,如下所示:

list_of_two(First, Last, [First, Last]).
但是,这对两个以上的项目不起作用。您最初的一条规则将起作用,如下所示:

create_list([1,2],[],O1), create_list([3,4],O1,O2), create_list([5,6],O2,O3).
这就产生了

[[5, 6], [3, 4], [1, 2]]

O3
列表中。

与其他语言相比,列表是Prolog中非常基本的数据结构:

[]
是/创建一个空列表
[1]
是/创建一个包含单个元素的列表
[1,2,3,4,…,n]
是/创建一个包含
n
元素的列表
[1 |[2,3,4]
是通过在列表
[2,3,4]
中插入
1
来创建一个列表(结果是
[1,2,3,4]

因此,您不需要谓词来“创建”列表:如果您有
n
元素,只需将它们放在括号中;如果元素是递归生成的,请使用
|
创建包含新元素的列表。例如:

put_in_list(A1,A2,A3, L):- L = [A1,A2,A3].
或者:

put_in_list(A1,A2,A3, [A1,A2,A3]).
此外:


总而言之,你应该注意类型;在您的例子中,您有一个数字列表(我们称之为X),您需要一个数字列表(因此这将是一个X列表)。当你给一个谓词一系列的X作为参数而不是一个X时,这个问题就产生了。

谢谢你:如果我现在突然有了这样一个参数:a=[1,2],B=[3,4],C=[5,6],D=[a,B],list of_two(C,D,Output),那么它将产生一个太多的括号:Output=[5,6],[1,2],[3,4]@结果取决于如何使用谓词。看看编辑。嗨,我还是觉得有点迷失了如何正确地使用它不止一次。比如:嗨=[1,2],嗨=[3,4],把你放在列表中(嗨,嗨,出去),把你放在列表中(嗨,出去,出去2)。Out2将返回[[X,X],[X,X],[X,X]],类似于,而不是:[[X,X],[X,X],[X,X]],因此它将不是三个元素,而是两个元素!
generate(0, []).
generate(N, [ [N, NN]| Rest ]):-
   NN is N-1,
   NNN is N-2,
   generate(NNN, Rest).