gpt4 book ai didi

list - Prolog 中的复合术语和列表

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

为什么复合术语在性能方面优于列表?
例如,

matrix(row(1,2,3),row(1,2,3),row(1,2,3))

优于
[[1,2,3],[1,2,3],[1,2,3],[1,2,3]]

谢谢!

最佳答案

首先,要明确:列表是一种复合术语。

要查看列表是什么,请使用 write_canonical/1 .例如,使用 GNU Prolog:

| ?- write_canonical([1,2,3]).  
'.'(1,'.'(2,'.'(3,[])))

关于内存中的表征,我推荐 Richard O'Keefe 的书。系统之间的细节有所不同,但您可以很确定地表示术语 row(1,2,3)在内存中,您需要:
  • 一个用于仿函数/元数的存储单元
  • 参数的 3 个存储单元

  • 对于术语 .(1, .(2, .(3, [])在直接的内存表示中,您需要:
  • 三个存储单元 3 个 '.'/2仿函数
  • 3 个用于 1、2、3 的存储单元
  • 可能还有更多(例如 [] )。

  • 由此,您已经看到使用列表至少需要大约 两次 在这个表示中尽可能多的内存。

    一些您可以自己执行的简单测试将帮助您了解这些表示在您的系统中的内存消耗差异。

    关于list - Prolog 中的复合术语和列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36830213/

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