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