そのため、今週は Prolog の拡張機能の 1 つである Logtalk をインストールしました。この場合、私は Prolog SWI を使用していますが、少し問題が発生しました。Logtalk を使用して自分のプロジェクトを実際に参照する方法がわかりません。コード自体を理解するために Logtalk に付属のサンプルを調べたところ、それらを読み込んで完全に実行することができました。私が理解していないのは、logtalk がファイルをロードしているときに実際に何が起こっているのか、そして自分のプロジェクトをどのようにロードできるのかということです。
議論のポイントとして、「hello_world」の例を取り上げます。hello_world というファイルは、Logtalk ファイルのサンプル フォルダーにあります。それでも、次のように相談されます。
| ?- logtalk_load(hello_world(loader)).
私が最初に思ったのは、「それはファンクターだ」ということでした。トレースを使用して何をしているのかを調べたところ、ライブラリから呼び出されていて、examples フォルダーに移動する方法を教えられていることがわかり、そこで「hello_world」を開いた" フォルダ、次に "loader" ファイル。その後、通常のコンパイルが行われました。
ライブラリを見てみましたが、何が起こっているのかわかりませんでした。また、これは、ユーザーが作成したプロジェクトを Logtalk にロードするための実用的な方法ではないだろうとも考えました。SWI でこれを行う方法を尋ねる別の投稿もありましたが、返信がなく、問題を解決するための努力がなされたようには見えませんでした。
ここではっきりさせておきますが、「consult('...')」を使用できます。「consult」を使用してプロジェクトを開くこともできますが、これを行うと、logtalk コンソールは logtalk 拡張機能を使用していないようで、単なるバニラ プロローグです。私は Windows 用のインストーラーを使用して logtalk をインストールしました。
チュートリアルを見つけようとしましたが、Logtalk に関するものを見つけるのは非常に困難です。私が見つけたのは、プロジェクト内からのロードに関する次のドキュメントです。
logtalk_load/1.
logtalk_load/2.
私は次のように理解しています:
logtalk_load(file). % Top level loading
logtalk_load(folder(file). % Bottom level loading
そのため、プロジェクトの他のコンポーネントをロードするローダー ファイルを作成するたびに膨大な手動ロードを節約する必要があります (これは、Logtalk の例で行われていることです)。このビットは私にとっては理にかなっていると思いますが、ローダーファイルに到達する方法はそうではありません。
正しく理解できているかどうかはまだわかりませんが、正しく理解できていても、自分のプロジェクトをどのようにロードするかについてはまだ迷っています。私が例から非常に迅速に学ぶので、最善の例を挙げることができれば、あなたが与えることができるどんな助けにも感謝します.
少し更新
プログラムの実行に logtalk コンソールを使用しているかどうか尋ねられましたが、「QUICK_START」ファイル [Start > Programs > Logtalk > "Logtalk - Prolog-SWI ( console)"] logtalk アドオンが機能しているかどうか再確認することを考え、「鳥」の例をテストしました。これは、オブジェクトを使用しており、よく知られている例だからです。繰り返しになりますが、logtalk_load/2 ファンクターを使用すると、すべてが正常に機能します。
これまでに寄せられたフィードバックを踏まえて、ライブラリ パスが参照しているものをもう少し調べてみました。logtalk がファイルをロードする方法を調べています。logtalk は libpaths と呼ばれるプロローグ ファイルを含むフォルダーを調べます。これは基本的に例を見つける方法であり、ファイルをどこから取得するかについての途中の説明です。したがって、少なくとも「logtalk_load/2」と言うと、このファイルに移動して、求めているフォルダーの場所を見つけます。
自分のプロジェクト フォルダーを既にサンプル フォルダーに配置しているので、すぐに自分のフォルダーをリストに追加して、これが少なくとも部分的な解決策になるかどうかをテストして、物事をもう少し理解するのに役立ちます。以下を libpaths.pl ファイルに追加しました。
logtalk_library_path(my_project, examples('my_project/')).
% The path must end in a / so I have done so
これで、フォルダー パスが宣言され、フォルダーが取得されました。ローダー ファイルは、ローダーを使用するときに呼び出すものです。独自の lib パス フォルダーを設定することを考えなくても、作業を開始して実用的な学習を行うのに十分な量が必要です。残念ながら、私の調査は失敗したようで、次のものが返されました。
ERROR: Unhandled exception: existence_error(library,project_aim)
私が見たいと思っていたものではありませんが、私はこのライブラリ エラー ビジネスに戻ります。プロジェクトフォルダーへの参照がどこかにありませんが、他に参照が必要な場所がわかりません。この問題でトレースを実行しても、次のことが発生しただけで役に立ちませんでした。
Call: (17) logtalk_library_path(my_project, _G943) ? creep
Fail: (17) logtalk_library_path(my_project, _G943) ? creep
ERROR: Unhandled exception: existence_error(library,my_project)
呼び出しが失敗しています。logtalk が探している場所に参照が見つかりません。この種の問題に関しては、私はせいぜい初心者です。現在、コンピューターを使用してから 3 年しか経っていません。過去 2 年間、ビジュアル スタジオで C# と C++ を使用してプログラミングを行っています。少なくとも私はこの問題にもう少し光を当てましたが、この情報を基にさらに役立つアドバイスはありますか?