Prolog中将whole作为第一参数的concat/3谓词实现问题咨询
问题分析
- 你的核心需求是实现
concat(Whole, Part1, Part2)谓词,满足两个规则:Part1和Part2均为非空列表Part1和Part2拼接结果恰好等于Whole
- 现有代码的核心问题:参数顺序调整后没有对应修改递归逻辑,同时边界条件不符合「part1、part2非空」的要求,谓词名也和你定义的
concat/3不符。
正确实现代码
% 边界条件:Part1仅含一个元素时,Whole为该元素拼接Part2,同时要求Part2非空 concat([H|Part2], [H], Part2) :- Part2 \= []. % 递归规则:Whole头部和Part1头部一致时,递归匹配剩余部分 concat([H|RWhole], [H|RPart1], Part2) :- concat(RWhole, RPart1, Part2).
效果验证
调用你给出的示例concat(A, [12, a, z], [1, 2, 3, 4]),会直接返回预期结果A = [12, a, z, 1, 2, 3, 4]。
反向调用也可正常生效:输入concat([1,2,3,4], Part1, Part2)会返回所有符合要求的非空拼接组合:
Part1 = [1], Part2 = [2,3,4]Part1 = [1,2], Part2 = [3,4]Part1 = [1,2,3], Part2 = [4]
内容的提问来源于stack exchange,提问作者Mr.Robooot
相关产品推荐
相关产品推荐

