2016-08-01 71 views
1

我需要帮助指出我的谓词将出现错误的原因,以便将列表中的所有元素加倍。我对Prolog很陌生,很可能错过了一些非常明显的东西。基本上,我的谓词应该包含一个列表(例如[1,2,3])并生成一个列表,其元素加倍([2,3,6])。将Prolog中的列表中的所有元素加倍

这是我到目前为止有:

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

然而,我的代码目前只输出“假”无论我所付出的投入它。任何帮助,将不胜感激。

+0

去查查了'追加([X],Doubled_list,Doubled_list)'的文档。你试图将'[X]'附加到某个东西上,并用相同的东西来统一它。这总是会失败。 – Enigmativity

+0

在Prolog中,不能在谓词子句中更新相同的变量。 – lurker

回答

2

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

试试这个:

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

@ lurker - 非常真实,赦免双关语。 – Enigmativity