Prolog问题-将元素数组转换为一组元素

Prolog问题-将元素数组转换为一组元素,prolog,Prolog,我试图编写一个谓词,将一个元素数组转换为一组元素。为此,我在swi prolog中创建了以下谓词: sterge(_, [], []). sterge(A, [A|L], New):- sterge(A, L, New). sterge(A, [B|L], [B|New]):- A \= B, sterge(A, L, New). multime(A, New):- mult(A, [], New). mult([], A, A). mult([A|L], [A|T],

我试图编写一个谓词,将一个元素数组转换为一组元素。为此,我在swi prolog中创建了以下谓词:

sterge(_, [], []).

sterge(A, [A|L], New):-
    sterge(A, L, New).

sterge(A, [B|L], [B|New]):-
 A \= B,
 sterge(A, L, New).

multime(A, New):-
 mult(A, [], New).

mult([], A, A).

mult([A|L], [A|T], New):-
 sterge(A, L, L1),
 mult(L1, T, New).
如您所见,
sterge
谓词包含3个参数。其主要目的是将
A
元素的所有外观删除到
L
列表中,从而生成不包含任何
A
元素的
New
列表

在这个谓词的帮助下,我试图一个接一个地从列表中删除所有元素,包括它们的所有外观,并将它们添加到一个新列表中,该列表包含给定数组元素的单个副本,该数组需要转换为一组元素

mult
谓词包含3个参数

第一个参数是必须转换为集合的给定数组

第二个参数是缓冲区列表,用于在谓词执行期间逐个包含数组的唯一元素

第三个参数用于返回完整的参数集

实际上,我希望在给定数组(第一个参数)为null(
[]
)时,将第三个参数与第二个参数的值统一起来

最后,接受两个参数(给定数组和所需集)的
multi-me
谓词使用其参数的以下值对
mult
谓词启动调用。对于第一个参数,它采用给定的数组;对于第二个参数,它采用空列表(
[]
),对于第三个参数,它采用需要获得的所需元素集


但是,当我调用
multime
谓词时,我总是收到
false
结果。你能告诉我哪里出了问题吗?

你的
骡子的车身坏了

mult([A|L], [A|T], New):-
 sterge(A, L, L1),
 mult(L1, T, New).
您正在拆分第一个参数和第二个参数的列表
mult
multime
调用,第二个参数为空列表。无法拆分空列表,因此谓词无法匹配。这就是为什么您会得到一个
false

这是固定密码

mult([A|L], T, New):-
  sterge(A, L, L1),
  mult(L1, [A|T], New).

列表连接是在对
mult
的递归调用中完成的。当
L1
为空列表时,递归将结束,连接的列表将通过
New
变量返回。注意:新列表的顺序将相反。

请提供一些调用
sterge
mult
multime
以及实际结果和预期结果。我已经测试了
sterge
谓词,它工作正常。例如,对于元素
1
和列表
[1,2,1,2,3,4]
,预期结果应该是
[2,2,3,4]
。如果您启动调用
sterge(1[1,2,1,2,3,4],[2,2,3,4])
您应该会收到
true
值。另一方面,
multime
mult
不能正常工作。我的意思是,对于我引入的每个值,我都会收到
false
值作为回报。预期结果应为:
multime([1,2,2,3,3,4,4],[1,2,3,4])。