有人可以帮我找出这些规则中的错误吗?
concat([], List, List).
concat([Head|[]], List, [Head|List]).
concat([Head|Tail], List, Concat) :- concat(Tail, List, C), concat(Head, C, Concat).
尝试连接两个列表失败:
| ?- concat([1,2], [4,7,0], What).
no
最佳答案
要按照您想要的方式修复您的代码,您只需转换 Head
进入 [Head]
在您最后一次调用 concat/3
在你的最后一个条款中。问题是你用 Head
调用你的谓词。仅作为第一个参数,它不是一个列表。
不过,这里有几个注意事项:
[Head|[]]
相当于[Head]
这是 SWI-pl 的版本,提示您使用良好的序言递归:
append([], List, List).
append([Head|Tail], List, [Head|Rest]) :-
append(Tail, List, Rest).
您可以在此处或 Learn Prolog Now! 中找到有关最近帖子的其他资源如果您想学习如何正确使用递归,请参阅教程。
关于list - Prolog 中列表的串联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9348640/