我有一个 Prolog 程序,我正在对所有达到一定长度的字符串进行强力搜索。我正在检查哪些字符串与特定模式匹配,不断添加模式,直到希望找到一组涵盖所有字符串的模式。我想将哪些存储到与我的任何模式都不匹配的文件中,这样当我添加新模式时,我只需要检查剩余的内容,而不是再次进行整个强力搜索。
如果我用 python 编写这个,我只需pickle字符串列表,然后从文件中加载它。有人知道如何在 Prolog 中做类似的事情吗?
我有丰富的 Prolog 编程经验,但 Prolog IO 的经验很少。我可能可以编写一个谓词来读取文件并将其解析为术语,但我认为可能有一种方法可以更轻松地做到这一点。
如果您想写出一个术语并能够在以后随时读回(除了变量名称),请使用 ISO 内置write_canonical/1
or write_canonical/2
. It is 当前系统很好地支持 http://www.complang.tuwien.ac.at/ulrich/iso-prolog/conformity_assessment#write_canonical. writeq/1
and write/1
也经常工作,但并非总是如此。writeq/1
使用运算符语法(因此您需要使用存在的相同运算符来读回它)并且write/1
不使用引号。所以它们“大部分时间”都在工作——直到它们坏掉。
或者,您可以使用 ISO 写入选项[quoted(true), ignore_ops(true), numbervars(false)]
in write_term/2
or write_term/3
。如果您想使用更多选项,例如variable_names/1
还保留变量的名称。
另请注意,书面术语末尾不包括句点。所以你必须在最后手动写一个空格和一个句点。需要该空格来确保由图形字符组成的原子不会与末尾的句点发生冲突。想想写原子'---'
必须写成--- .
而不是作为---.
您可以只在原子的情况下写空格。或者一个不“粘合”的原子.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)