gpt4 book ai didi

serialization - 相当于 SWI Prolog 中的 Python 酸洗?

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

我有一个 Prolog 程序,我在该程序中对所有达到一定长度的字符串进行强力搜索。我正在检查哪些字符串与特定模式匹配,不断添加模式,直到我希望找到一组涵盖所有字符串的模式。我想将哪些存储到一个与我的任何模式都不匹配的文件中,这样当我添加一个新模式时,我只需要检查剩余的,而不是再次进行整个蛮力搜索。

如果我用 Python 写这个,我会 pickle 字符串列表,然后从文件中加载它。有人知道如何在 Prolog 中做类似的事情吗?

我有丰富的 Prolog 编程经验,但很少有 Prolog IO 编程经验。我可能可以编写一个谓词来读取文件并将其解析为一个术语,但我认为可能有一种方法可以更轻松地完成这项工作。

最佳答案

如果你想写出一个术语并能够在以后任何时候读回它,除非变量名称,使用 ISO 内置 write_canonical/1write_canonical/2。是quite well supported by current systems . writeq/1write/1 也经常工作,但并非总是如此。 writeq/1 使用运算符语法(因此您需要使用相同的运算符读回它)并且 write/1 不使用引号。所以它们“大部分时间”都在工作——直到它们坏掉。

或者,您可以在 write_term/2 中使用 ISO 写入选项 [quoted(true), ignore_ops(true), numbervars(false)] >write_term/3。如果您想使用更多选项(例如 variable_names/1)来保留变量的名称,这对您来说可能会很有趣。

另请注意,术语 written 末尾不包含句号。所以你必须在最后手动写一个空格和一个句点。需要空格以确保由图形字符组成的原子不会破坏末尾的句点。考虑编写原子 '---' ,它必须写成 --- . 而不是 ---. 你可能会写只有在原子的情况下才有空间。或不与“粘合”的原子。

关于serialization - 相当于 SWI Prolog 中的 Python 酸洗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11040227/

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