序言:查找列表编号的2次并将该编号及其双精度放入列表中

1 recursion list prolog nested-lists

我是Prolog的新手,我一直试图在Prolog中创建一个谓词,该谓词可以找到一个数字列表的双精度数,并将该数字及其双精度数放在一个列表中。例如:

?- double_list([2,3,6,10], List).
List = [[2, 4], [3, 6], [6, 12], [10, 20]].
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止完成的代码:

double_list([],[]).
double_list([H|T], [[H, double]| List]):-
    double is (H*2),
    double_list(T, List).
Run Code Online (Sandbox Code Playgroud)

我不知道哪里出了问题。false.尝试运行该程序时,我会不断尝试。

Pau*_*ura 5

Prolog中的变量以下划线或大写字母开头。代码中的问题是您编写的double不是Double。将代码更正为:

double_list([],[]).
double_list([H|T], [[H, Double]| List]):-
    Double is H*2,
    double_list(T, List).
Run Code Online (Sandbox Code Playgroud)

为您的查询提供预期的答案:

| ?- double_list([2,3,6,10], List).

List = [[2, 4], [3, 6], [6, 12], [10, 20]]
yes
Run Code Online (Sandbox Code Playgroud)

某些Prolog系统能够检测代码中的错误。例如,使用SICStus Prolog,我们得到:

* invalid LHS in arithmetic expression: double
Run Code Online (Sandbox Code Playgroud)