問題タブ [pyclips]

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.

0 投票する
0 に答える
126 参照

rule-engine - PyCLIPS: エラーから回復する方法

PyCLIPS を使用して、ECA サーバー (event-conditon-action) として機能するプログラムに CLIPS を統合しています。システム状態とともに、メッセージ バスでアクションを発行するルールをトリガーする場合とトリガーしない場合がある受信イベントがあります。

システム状態は、受信イベントに応じてスロットが変更されるインスタンスの形で現れます。

このソフトウェアは長寿命のサービスであることを意図していますが、ルールの実行中にエラーが発生した場合、たとえば名前の誤ったハンドラーによって次のようになります。

クリップ セッションが新しいメッセージに応答しなくなります。スロットは次を使用して更新されなくなりました:

clips.DebugConfig.WatchAll()デバッグ出力がない場合でも、クリップでは何も起こりません。

例:

これを回避したり、この状態から回復したりする可能性はありますか?

0 投票する
0 に答える
74 参照

python-2.7 - PyCLIPS を介して CLIPS から Python に大きな数値 (Python の int より大きい) を渡す

PyCLIPS は、非常に大きな数値を変換する前に int に変換しているようです。

変換はこちらPython -> CLIPS

しかし、ここでも変換 CLIPS -> Python

CLIPSにもPyCLIPSにも、長い間タイプがないというのは正しいですか? すべてが int にキャスト (切り捨て) されていますか? これはバグですか?

6442901632python-call を介して CLIPS から python に値を渡すと、python の値になるため、私は尋ねています0x7fffffff。または、私の 32 ビット Python が問題の原因ですか?

intPyClips 経由で CLIPS から Python にPython より大きい値を渡すにはどうすればよいですか?

0 投票する
0 に答える
1064 参照

python-2.7 - Windows Python 2.7 32 ビット用の CLIPS 6.30 に基づく PyCLIPS のインストール

CLIPS バージョン 6.30 をベースにしたバージョンの PyCLIPSがあることを知りました。同じ (または同様の) PyCLIPS バージョンを pip 経由でインストールすることもできます。こちらを参照してください

Linux では、どちらのアプローチも問題なく機能します。つまり、git clone + setup.py 経由でインストールするか、pip 経由でインストールします。Windows では、cygwin 64bit でのみ動作しました。pip install pyclips失敗しました(「-DWIN_MVC」フラグがないためだと思います。以下のステップ7を参照してください)。

ただし、Windows 7 64ビットで正確にPython2.7 32ビットにするために、「通常の」Windows pythonでCLIPS 6.30に基づくPyCLIPSを使用したいと思います。Visual Studio Express 2008 をインストールしました。

私が試したこと:

  1. git クローンhttps://github.com/almostearthling/pyclips.git
  2. CDパイクリップス
  3. git チェックアウト pyclips-1.1_clips-6.30
  4. ファイルを削除するclipssrc
  5. 公式リポジトリから CLIPS 6.30 ソースコードをダウンロードします
  6. clipssrc新しいフォルダを作成する フォルダ内に新しく作成されたpyclipsフォルダ
  7. coreフォルダの内容をフォルダに抽出しclipssrcます
  8. setup.py738 行あたりで、リストに追加'-DWIN_MVC'します。CFLAGS
  9. Windows用のパッチユーティリティをインストールし、PATHに追加します
  10. Visual Studio Express 2008 (32 ビット) コマンド プロンプトを起動します。
  11. pyclipsフォルダにcd
  12. 走るpython setup.py build
  13. ビルドが完了した場合(そうすべきです)、経由でインストールしますpython setup.py install

ビルドとインストールは完了しましたが、バージョン 6.30 より前の CLIPS で発生したように、大きな整数は依然としてエラーを引き起こします。2147483648これは、CLIPS が( sys.maxint+1python 2.7 32 ビットで)より大きい整数を処理できないことを意味します。

Visual Studio 2008 でのコンパイル中に、警告 " conversion from '__int64' to 'long', possible loss of data" が表示されました。対応する変数の型を に変更しましたlong long。警告は消えましたが、大きな整数のエラーはまだ存在しています。

CLIPS 6.30 ベースの PyCLIPS を Windows 7 64 ビットにインストールして、32 ビット Windows Python 2.7 で使用するにはどうすればよいですか?

編集 1: cygwin 32 ビットでインストールしようとしましたが、機能しませんでした。多分それは32/64ビットの問題ですか?クリップの 32 ビット バージョン (公式インストーラー経由でインストール) は、Windows 7 64 ビットで正常に動作します...

EDIT 2: sys.maxint を持つ python インタープリターでは動作するようですが、 sys.maxint を9223372036854775807持つインタープリターでは動作しないようです2147483647。興味深いことに、64 ビット Windows Python でさえ後者の値を持っています。

概要:

  • cygwin Python 64 ビット、maxint: 9223372036854775807、エラーなし
  • Cygwin Python 32 ビット、maxint: 2147483647、エラー
  • Windows Python 2.7 32 ビット、maxint: 2147483647、エラー
  • Windows Python 2.7 64 ビット、maxint: 2147483647、エラー
0 投票する
1 に答える
154 参照

pytest - CLIPS (クリア) コマンドが失敗する/pyclips で例外がスローされる

pytest を使用していくつかの単体テストを作成した pyclips / clips プログラムがあります。各テスト ケースには、イニシャルが含まclips.Clear()れ、その後に を介して実際のクリップ COOL コードが実行されますclips.Load(rule_file.clp)。各テストを個別に実行すると正常に動作します。

それでも、pytest にすべてのテストを実行するように指示すると、一部はClipsError: S03: environment could not be cleared. 実際、.py ファイル内のテストの順序によって異なります。後続のテスト ケースが例外をスローする原因となるテスト ケースがあるようです。

クリアが失敗するように、いくつかのクリップ コードがまだ「使用中」である可能性がありますか? 私はここでそれを読みました(clear)

CLIPS をクリアします。CLIPS 環境からすべての構成要素と関連するすべてのデータ構造 (ファクトやインスタンスなど) を削除します。クリアはいつでも安全に実行できますが、特定の構造は使用中に削除することができません。

これはここに当てはまりますか?(clear)コマンドが失敗する原因は何ですか?

編集:

問題を絞り込むことができました。これは、次の状況で発生します。

test_case_A は test_case_B の直前に来ます。test_case_A には次のtestようなものがあります

しかし、f_bio_putsに設定されています

(slot f_bio_puts (default [nil]))

したがって、[nil]最初に設定されているスロット変数のタイプをテストすると、(clear)コマンドが失敗するようです。何か案は?

編集2

何が問題を引き起こしているのかを知っていると思います。testラインです。クリップ ダイアログ ウィンドウで実行できるようにコードを調整しました。そして、経由でロードするときにこのエラーが発生しました(batch ...)

これがマスクされているのはpyclipsのバグだと思います。

0 投票する
1 に答える
84 参照

clips - スロットが正しく設定されるまでパターン マッチング (エラー) を回避する

ルールの LHS にはR_blup

つまり、 が?s22 以上かどうかをチェックします。?s2は という名前のインスタンス スロットに対応しますs2

残念ながら、エラーが発生します

Function >= expected argument #1 to be of type integer or float

(test ...問題は、引数 #1 を設定s2する前、つまり整数値または浮動小数点値を設定する前にコードが実行されることです。s2別のルールによってトリガーされる python-call 内で整数に設定することになっていますR_blah

エラーは、別のルールに属する別の python-call の途中でトリガーされますR_xyz。この python-call は、 を介してインスタンスを変更しますclips_instance.Slots["slot_name"] = some_value

これは通常どのように処理されますか?あまり好きではない 3 つの解決策があります。

  1. のデフォルト (整数) 値を設定しますs2
  2. 最初(test ...にチェックするように を変更します。nil
  3. 待機する別のチェック/ルールをs2追加nilする

エラーを試す/除外する/渡すことは可能ですか?