如何为谓词列表定义append函数?附示例及补充要求
为谓词式列表实现单个项追加的append谓词
当然可以为这种嵌套谓词结构的列表实现单个项追加的append/3谓词。先明确你的列表表示规则:
- 空列表用
empty_member表示 - 非空列表用
listMember(元素, 剩余列表)的嵌套结构表示,比如示例中的listMember(10, listMember(8, listMember(0, listMember(9, empty_member))))对应常规列表[10,8,0,9]
实现思路
append/3的逻辑分两种情况:
- 当原列表是空列表时,追加单个项后得到的新列表就是包含该项的单元素列表
- 当原列表是非空列表时,递归将项追加到原列表的剩余部分末尾,再重构当前元素与新剩余部分的结构
代码实现
% 情况1:原列表为空,追加项后得到单元素列表 append(Item, empty_member, listMember(Item, empty_member)). % 情况2:原列表非空,递归处理剩余部分 append(Item, listMember(Elem, Rest), listMember(Elem, NewRest)) :- append(Item, Rest, NewRest).
调用示例验证
用你给出的调用示例测试:
append(10, listMember(8, listMember(0, listMember(9, empty_member))), List).
运行后会得到结果:
List = listMember(8, listMember(0, listMember(9, listMember(10, empty_member))))
也就是把10追加到了原列表的末尾。
内容的提问来源于stack exchange,提问作者Madeleine
相关产品推荐
相关产品推荐

