gpt4 book ai didi

list - Prolog 中列表的串联

转载 作者:行者123 更新时间:2023-12-03 23:23:33 25 4
gpt4 key购买 nike

有人可以帮我找出这些规则中的错误吗?

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]
  • 您的算法的复杂性很差,n!我相信。
  • 在您的第二个子句之后没有插入任何剪切,您可以通过调用您的第三个子句生成无限选择点,列表长度为 1(因此调用您的第二个子句,然后通过您的第三个子句运行,等等......无限循环)。

  • 这是 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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com