如何在Prolog中创建指定维度的固定大小空列表
构造Prolog中的固定嵌套空列表
嘿,我来帮你实现这个特定维度的嵌套列表构造!你需要的是一个9元素的顶层列表,每个元素又是包含两个长度为9的匿名变量列表的子列表。下面给你几种简洁且可复用的实现方式:
方法1:递归+模块化子句
这种方法把问题拆分成小模块,可读性强,适配所有Prolog方言:
% 生成一个长度为9的匿名变量列表 length_9(List) :- length(List, 9). % 生成包含两个长度9列表的子结构 double_9_pair(Pair) :- Pair = [FirstRow, SecondRow], length_9(FirstRow), length_9(SecondRow). % 生成最终的顶层9元素列表 top_level_list(TopList) :- length(TopList, 9), maplist(double_9_pair, TopList).
使用方式
直接查询:
?- top_level_list(Result), write(Result).
执行后就会输出你想要的嵌套结构。
方法2:紧凑内联写法(SWI-Prolog友好)
如果你用的是SWI-Prolog,可以借助lambda表达式简化代码,无需额外辅助子句:
:- use_module(library(lambda)). top_level_list(TopList) :- length(TopList, 9), maplist(\Pair^(Pair = [A,B], length(A,9), length(B,9)), TopList).
方法3:快速直接生成
如果不想定义任何辅助子句,也可以用findall配合重复生成逻辑快速构造:
top_level_list(TopList) :- findall([A,B], (length(A,9), length(B,9)), Temp), length(Temp, 9), TopList = Temp.
小提示
- 所有方法生成的列表中,每个
_都是独立的匿名变量,后续可以单独绑定具体值 - Prolog的
length/2是双向谓词:当第二个参数为整数、第一个为变量时,会自动生成对应长度的变量列表
内容的提问来源于stack exchange,提问作者Enforcerke
相关产品推荐
相关产品推荐

