如何编写谓词将next结构的项转换为[Head|Tail]格式的列表
转换谓词实现方案
你要实现的是将自定义next/2嵌套结构转换为Prolog原生列表的谓词,核心逻辑用递归实现即可,具体如下:
完整代码
% 边界条件:空结构nill对应空列表 next_to_list(nill, []). % 递归规则:取出当前头部,剩余结构递归转换为列表尾部 next_to_list(next(Head, RestStruct), [Head | RestList]) :- next_to_list(RestStruct, RestList).
注意:如果你定义的空标识是单l的
nil,把第一行的nill改为nil即可。
测试验证
调用方式为next_to_list(输入的next结构, 输出列表变量),对应你给出的示例运行结果如下:
- 测试1:
next_to_list(next(1,nill), L).运行结果:L = [1] - 测试2:
next_to_list(next(4,next(3,next(2,next(1,nill)))), L).运行结果:L = [4,3,2,1] - 测试3:
next_to_list(next(22,next(11,next(9,next(6,next(3,next(2,next(5,nill))))))), L).运行结果:L = [22,11,9,6,3,2,5]
内容的提问来源于stack exchange,提问作者ragsa
相关产品推荐
相关产品推荐

