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.尝试运行该程序时,我会不断尝试。
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)