私がやっていること
現在、swipl-win ウィンドウにタブ補完機能を追加する SWI-Prolog モジュールの作成に取り組んでいます。これまでのところ、タブ文字が入力されるまで何も停止/返さずに、一度に1文字ずつ読み取るところまで実際に到達しました。current_functor/2
また、現在の用語のリスト ( 、current_arithmetic_function/1
、current_predicate/2
などを介して取得される [使用される述語は最終的にはコンテキストに基づく]) の部分文字列一致を使用して、不完全に型付けされた用語の可能なすべての補完を返す述語を既に作成しました。
私のコードを見たい場合は、ここにあります...私はまだPrologの達人ではないことを覚えておいてください(親切なヒントは大歓迎です)。
注: 「ねえ、これはこれまでに定義された用語に一致しますか?」述語は、現在の部分文字列で始まる現在の述語などがあるかどうかのみをチェックします。最終的には、コンテキスト (「キャレットは '単語' の途中にありますか?」) を使用して、潜在的な補完のどこに部分文字列を配置するかを決定します。
私が考えていること
現在、文字列はアトムなどのように一意である必要がないため、メモリ上での文字列の方が簡単であると読んだため、述語一致文字列(アトムではない)と言いました...しかし、もし私が最初に物事を文字列に変換するだけかもしれません(用語の読み方によって異なります。with_output_to
文字列に直接書き込むために使用することを検討しています)、とにかくアトムは作成されたばかりです。(あまり混乱していないように思います。) 今、アトムと文字列のどちらを使用するかを決定しようとしています。(しかし、文字列はアトムとしてカウントされませんか?)
注:これの多くは、この質問 に対する回答に依存します。これは、このプロジェクトでの文字列の使用に基づいて決定を下すためです。
私が求めていること
文字列 (したがってsub_string/5
) またはアトム (したがって ) を使用する必要がありsub_atom/5
ますか?