有人可以帮助在此规则中找到错误吗?
concat([], List, List).
concat([Head|[]], List, [Head|List]).
concat([Head|Tail], List, Concat) :- concat(Tail, List, C), concat(Head, C, Concat).
Run Code Online (Sandbox Code Playgroud)
尝试连接2个列表失败:
| ?- concat([1,2], [4,7,0], What).
no
Run Code Online (Sandbox Code Playgroud)
m09*_*m09 17
要按照您的预期方式修复代码,您只需要在最后一次调用中转换Head到[Head]最后concat/3一个子句中.问题是你Head只用第一个参数调用你的谓词,这不是一个列表.
虽然,这里有几个注释:
[Head|[]] 相当于 [Head]这是SWI-pl的版本,暗示您要进行良好的prolog递归:
append([], List, List).
append([Head|Tail], List, [Head|Rest]) :-
append(Tail, List, Rest).
Run Code Online (Sandbox Code Playgroud)
您可以在此处或在" 现在学习Prolog"中找到最近帖子的其他资源!教程如果你想学习如何正确使用递归.
小智 5
可以通过使用append来完成。
concatenate(List1, List2, Result):-
append(List1, List2, Result).
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。