我是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.
。
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