問題タブ [logtalk]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
prolog - ユーザーが照会できないルールの定義
ユーザーが照会できないルールを定義するにはどうすればよいですか? プログラム自体が別のルールを介してこのルールを呼び出すようにしたいだけです。
元:
ルール 1():- ルール 2()。
rule2():- 1<5.
?-rule1()。
真実
?-rule2()。
(答えがどうなるかわかりません。このクエリを失敗させたいだけです!)
user-interface - Logtalk と XPCE
XPCE と Logtalk の両方を使用してアプリケーションを開発できますか、それともクラス システムに互換性がありませんか?
logtalk - Logtalk:meta :: map、ラムダ式、プライベートメソッドへのアクセス
これはスコープ関連の問題だと思います。オブジェクトに次のようなルールがある場合:
私がこのダンスをするなら、これはうまくいくと思います:
なぜこれが必要なのか完全には理解していませんが、それが私の実際の問題に関連しているのではないかと思います。つまり、オブジェクトに標準のPrologループがある場合、次のようになります。
::asserta
この使用により、ファクトが(新しく作成されたインスタンスの)正しい名前空間に配置されることがわかりました。ただし、機知に富み、の本体process_arguments/1
をこのラムダ式に置き換えると、次のようになります。
次に、ファクトが親クラスに追加され、すべてのインスタンスで共有されることになります。これに置き換えると:
それでうまくいきますが、したくないときは公のルールを作らprocess_arg/1
なければなりません。私は何が欠けていますか?
swi-prolog - Logtalk - logtalk_load が失敗する
私はswi prologを使用しており、logtalkをインストールしました。
一部のサンプル プロジェクトで logtalk_load を呼び出すと、常に false が返されます。
私は何を間違っていますか?
loading - Prolog SWI : Logtalk、自分のプロジェクト ファイルをロードするにはどうすればよいですか?
そのため、今週は Prolog の拡張機能の 1 つである Logtalk をインストールしました。この場合、私は Prolog SWI を使用していますが、少し問題が発生しました。Logtalk を使用して自分のプロジェクトを実際に参照する方法がわかりません。コード自体を理解するために Logtalk に付属のサンプルを調べたところ、それらを読み込んで完全に実行することができました。私が理解していないのは、logtalk がファイルをロードしているときに実際に何が起こっているのか、そして自分のプロジェクトをどのようにロードできるのかということです。
議論のポイントとして、「hello_world」の例を取り上げます。hello_world というファイルは、Logtalk ファイルのサンプル フォルダーにあります。それでも、次のように相談されます。
私が最初に思ったのは、「それはファンクターだ」ということでした。トレースを使用して何をしているのかを調べたところ、ライブラリから呼び出されていて、examples フォルダーに移動する方法を教えられていることがわかり、そこで「hello_world」を開いた" フォルダ、次に "loader" ファイル。その後、通常のコンパイルが行われました。
ライブラリを見てみましたが、何が起こっているのかわかりませんでした。また、これは、ユーザーが作成したプロジェクトを Logtalk にロードするための実用的な方法ではないだろうとも考えました。SWI でこれを行う方法を尋ねる別の投稿もありましたが、返信がなく、問題を解決するための努力がなされたようには見えませんでした。
ここではっきりさせておきますが、「consult('...')」を使用できます。「consult」を使用してプロジェクトを開くこともできますが、これを行うと、logtalk コンソールは logtalk 拡張機能を使用していないようで、単なるバニラ プロローグです。私は Windows 用のインストーラーを使用して logtalk をインストールしました。
チュートリアルを見つけようとしましたが、Logtalk に関するものを見つけるのは非常に困難です。私が見つけたのは、プロジェクト内からのロードに関する次のドキュメントです。
私は次のように理解しています:
そのため、プロジェクトの他のコンポーネントをロードするローダー ファイルを作成するたびに膨大な手動ロードを節約する必要があります (これは、Logtalk の例で行われていることです)。このビットは私にとっては理にかなっていると思いますが、ローダーファイルに到達する方法はそうではありません。
正しく理解できているかどうかはまだわかりませんが、正しく理解できていても、自分のプロジェクトをどのようにロードするかについてはまだ迷っています。私が例から非常に迅速に学ぶので、最善の例を挙げることができれば、あなたが与えることができるどんな助けにも感謝します.
少し更新
プログラムの実行に logtalk コンソールを使用しているかどうか尋ねられましたが、「QUICK_START」ファイル [Start > Programs > Logtalk > "Logtalk - Prolog-SWI ( console)"] logtalk アドオンが機能しているかどうか再確認することを考え、「鳥」の例をテストしました。これは、オブジェクトを使用しており、よく知られている例だからです。繰り返しになりますが、logtalk_load/2 ファンクターを使用すると、すべてが正常に機能します。
これまでに寄せられたフィードバックを踏まえて、ライブラリ パスが参照しているものをもう少し調べてみました。logtalk がファイルをロードする方法を調べています。logtalk は libpaths と呼ばれるプロローグ ファイルを含むフォルダーを調べます。これは基本的に例を見つける方法であり、ファイルをどこから取得するかについての途中の説明です。したがって、少なくとも「logtalk_load/2」と言うと、このファイルに移動して、求めているフォルダーの場所を見つけます。
自分のプロジェクト フォルダーを既にサンプル フォルダーに配置しているので、すぐに自分のフォルダーをリストに追加して、これが少なくとも部分的な解決策になるかどうかをテストして、物事をもう少し理解するのに役立ちます。以下を libpaths.pl ファイルに追加しました。
これで、フォルダー パスが宣言され、フォルダーが取得されました。ローダー ファイルは、ローダーを使用するときに呼び出すものです。独自の lib パス フォルダーを設定することを考えなくても、作業を開始して実用的な学習を行うのに十分な量が必要です。残念ながら、私の調査は失敗したようで、次のものが返されました。
私が見たいと思っていたものではありませんが、私はこのライブラリ エラー ビジネスに戻ります。プロジェクトフォルダーへの参照がどこかにありませんが、他に参照が必要な場所がわかりません。この問題でトレースを実行しても、次のことが発生しただけで役に立ちませんでした。
呼び出しが失敗しています。logtalk が探している場所に参照が見つかりません。この種の問題に関しては、私はせいぜい初心者です。現在、コンピューターを使用してから 3 年しか経っていません。過去 2 年間、ビジュアル スタジオで C# と C++ を使用してプログラミングを行っています。少なくとも私はこの問題にもう少し光を当てましたが、この情報を基にさらに役立つアドバイスはありますか?
prolog - Logtalk から SWI-Prolog ライブラリにアクセスする
Logtalk を使ってとても楽しんでいますが、使用中に問題が発生しましたphrase_from_file
。具体的には、私の場合は次のようになります。
問題はすべて への呼び出しにありphrase_from_file
ます。scanlist
おそらくこのオブジェクトに対してローカルであるため、を見つけることができないため、次のエラーが発生します。
しかし、次のようなモジュール参照でそれを拡大しようとすると:
次のエラーが表示されます。
pio:phrase_from_file(this::scanlist(Scans), Filename)
またはを使用しても同じですpio:phrase_from_file(scan_parser::scanlist(Scans), Filename)
。SWI のモジュール機能のエミュレーションで代わりに 1 つのコロンを使用すると、次のようなメッセージが表示されますERROR: phrase/3: Undefined procedure: scan_parser:scanlist/3
。
ここでの問題は、SWI の PIO ライブラリーが渡すべきものを構築しようとしていてphrase
、それが十分に知的ではないことだと思います。しかし、これは私が を使用してよく思いつくものでphrase_from_file/2
あり、SWI のライブラリから何かを発掘して借りたいと思うこともあると思います。今後の正しい道は何ですか?Logtalk のカプセル化を可能な限り維持したいと思います。
ありがとう!
swi-prolog - logtalk 3.0.0.1 を使用して logtalk_load でライブラリをロードできませんでした
SWI Prolog
バックアップされたコンパイラ (v 6.6.1) として使用します。logtalk
3.0.0.1をインストールした後、エラーが発生し始めました
logtalk_load(library(types_loader), [source_data(on), report(on)])。
% [c:/users/dizqj373/documents/logtalk/library/termp.lgt ロード済み] ! ドメイン エラー: 値 alias/2 がドメイン ディレクティブにありません! ディレクティブで :- alias(termp,[variables/2 as vars/2]) ! ファイル c:/users/dizqj373/documents/logtalk/library/term.lgt 行 36-37 の間 警告: [スレッド 2] c:/users/dizqj373/documents/logtalk/library/lgt_tmp/types_loader.pl:5:初期化目標に失敗しました % [c:/users/dizqj373/documents/logtalk/library/types_loader.lgt がロードされました] true.
私を助けて、何が間違っている可能性があるかを少し教えてもらえますか? ありがとう!
logtalk - Logtalk : Windows でキャメルケース命名のファイルをロードする
logtalk 3.1.2 では、OS X および Linux でキャメルケース名のファイルをロードしても問題ありませんが、Windows では例外がスローされます ( ERROR : file does not exist
)。
どうしたの ?