在Prolog中将列表中的所有元素加倍

在Prolog中将列表中的所有元素加倍,prolog,Prolog,我需要帮助找出谓词将列表中的所有元素加倍的错误。我不熟悉Prolog,可能会错过一些非常明显的东西。基本上,我的谓词应该获取一个列表(例如[1,2,3]),并生成一个元素加倍的列表([2,3,6]) 以下是我到目前为止的情况: double_elements([], []). double_elements([H|T], Doubled_list):- X is H*2, append([X], Doubled_list, Doubled_list), double_elements

我需要帮助找出谓词将列表中的所有元素加倍的错误。我不熟悉Prolog,可能会错过一些非常明显的东西。基本上,我的谓词应该获取一个列表(例如[1,2,3]),并生成一个元素加倍的列表([2,3,6])

以下是我到目前为止的情况:

double_elements([], []).
double_elements([H|T], Doubled_list):-
  X is H*2,
  append([X], Doubled_list, Doubled_list),
  double_elements(T, Doubled_list).

然而,我的代码目前只输出“false”,不管我给它什么输入。任何帮助都将不胜感激。

您试图将[X]附加到某个内容上,并将其与相同的内容统一起来。那总是会失败的

请尝试以下方法:

double_elements([], []).
double_elements([H|T], [X|Doubled_list]):-
    X is H*2,
    double_elements(T, Doubled_list).

请查阅文档以获取
append([X]、double\u list、double\u list)
。您正试图将
[X]
附加到某个对象上,并将其与相同的对象统一起来。这总是会失败的。在Prolog中,你不能在谓词子句中不断更新同一个变量。@Louger-非常正确,请原谅这个双关语。