我在做什么
我目前正在创建一个 SWI-Prolog 模块,该模块将制表符完成功能添加到 swipl-win 窗口。到目前为止,我实际上已经将它带到了一次读取单个字符的位置,而无需停止/返回任何内容,直到键入制表符为止。我还编写了一个谓词,它通过对当前术语列表使用子字符串匹配(通过current_functor/2
、current_arithmetic_function/1
、current_predicate/2
等获得[所使用的谓词最终将基于上下文])来返回不完整类型术语的所有可能完成。
如果您想查看我的代码,它就在这里……请记住,我还不是 Prolog 大师(非常欢迎友好的提示)。
注意: “嘿,到目前为止,这是否与任何定义的术语匹配?” 谓词仅检查是否有任何当前以子字符串开头的谓词等。最终,它将使用上下文(“插入符号在‘单词’的中间吗?”)来确定子字符串在任何潜在补全中的位置。
我在想什么
目前我已经说过谓词匹配字符串(不是原子),因为我读到字符串在内存上更容易,因为它们不必像原子等那样是唯一的......但我不确定如果我这样做是否值得可能只是首先将事物转换为字符串(取决于我在术语中的阅读方式;我正在考虑使用with_output_to
直接写入字符串),然后无论如何都会创建原子。(希望我听起来不会太困惑。)现在我只是想决定是使用原子还是字符串。(但字符串不算作原子吗?)
注意: 这在很大程度上取决于我对这个问题的回答,因为我将根据他们在这个项目中使用字符串的决定做出决定。
我在问什么
我应该使用字符串(因此sub_string/5
)还是原子(因此sub_atom/5
)?