Prolog:查找列表编号的2倍,并将数字及其双精度放入列表中

问题描述 投票:1回答:1

我是Prolog的新手,我一直在尝试在Prolog中创建一个谓词,它找到一个数字列表的两倍,并将数字和它的双精度放在一个列表中。例如:

?- double_list([2,3,6,10], List).
List = [[2, 4], [3, 6], [6, 12], [10, 20]].

这是我到目前为止所做的代码:

double_list([],[]).
double_list([H|T], [[H, double]| List]):-
    double is (H*2),
    double_list(T, List).

我不知道哪里出错了。在尝试运行程序时,我继续获取false.

list recursion prolog nested-lists
1个回答
5
投票

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

double_list([],[]).
double_list([H|T], [[H, Double]| List]):-
    Double is H*2,
    double_list(T, List).

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

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

List = [[2, 4], [3, 6], [6, 12], [10, 20]]
yes

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

* invalid LHS in arithmetic expression: double
© www.soinside.com 2019 - 2024. All rights reserved.