1

私はPerlAI::ExpertSystem::Advancedモジュールを使おうとしていますが、初期ファクトの配列でsignを使おうとしています。このモジュールのドキュメントに例を示します。

my $ai = AI::ExpertSystem::Advanced->new(
viewer_class => 'terminal',
knowledge_db => $yaml_kdb,
initial_facts => ['I', ['F', '-'], ['G', '+']);

しかし、何か問題があります(構文エラー)。コードの最後に1つ]欠けていると思います。

最初の質問:正しい形式は何ですか?この例を実行すると、端末に多くのエラーが表示されます。

2番目の質問:ファイルを使用して最初の事実を保存できますか?

回答ありがとうございます。

エラーログ

ドキュメントの例を使用する場合:

syntax error at mix.pl line 24, near "])"
Global symbol "$ai" requires explicit package name at mix.pl line 26.
Missing right curly or square bracket at mix.pl line 27, at end of line
Execution of mix.pl aborted due to compilation errors.

]式の最後に正しい場所に置くと、次のようになります。initial_facts => ['I', ['F', '-'], ['G', '+']]);

Attribute (initial_facts) does not pass the type constraint because: Validation failed for 'ArrayRef[Str]' with value ARRAY(0x3268038) at C:/Perl64/lib/Moose/Meta/Attribute.pm line 1274.
  Moose::Meta::Attribute::verify_against_type_constraint('Moose::Meta::Attribute=HASH(0x3111108)', 'ARRAY(0x3268038)', 'instance', 'AI::ExpertSystem::Advanced=HASH(0x30ef068)') called at C:/Perl64/lib/Moose/Meta/Attribute.pm line 1261
  Moose::Meta::Attribute::_coerce_and_verify('Moose::Meta::Attribute=HASH(0x3111108)', 'ARRAY(0x3268038)', 'AI::ExpertSystem::Advanced=HASH(0x30ef068)') called at C:/Perl64/lib/Moose/Meta/Attribute.pm line 531
  Moose::Meta::Attribute::initialize_instance_slot('Moose::Meta::Attribute=HASH(0x3111108)', 'Moose::Meta::Instance=HASH(0x32673d8)', 'AI::ExpertSystem::Advanced=HASH(0x30ef068)', 'HASH(0x3118298)') called at C:/Perl64/lib/Class/MOP/Class.pm line 525
  Class::MOP::Class::_construct_instance('Moose::Meta::Class=HASH(0x2eb2418)', 'HASH(0x3118298)') called at C:/Perl64/lib/Class/MOP/Class.pm line 498
  Class::MOP::Class::new_object('Moose::Meta::Class=HASH(0x2eb2418)', 'HASH(0x3118298)') called at C:/Perl64/lib/Moose/Meta/Class.pm line 274
  Moose::Meta::Class::new_object('Moose::Meta::Class=HASH(0x2eb2418)', 'HASH(0x3118298)') called at C:/Perl64/lib/Moose/Object.pm line 28
  Moose::Object::new('AI::ExpertSystem::Advanced', 'viewer_class', 'terminal', 'knowledge_db', 'AI::ExpertSystem::Advanced::KnowledgeDB::YAML=HASH(0x3118478)', 'verbose', 1, 'initial_facts', 'ARRAY(0x3268038)') called at mix.pl line 20
4

1 に答える 1

1

これはドキュメント(および場合によってはモジュール自体)のバグです。

負の初期ファクトでオブジェクトを設定するには、最初にディクショナリオブジェクトを作成する必要があります。

my $initial_facts_dict = AI::ExpertSystem::Advanced::Dictionary->new(
    stack => [ 'I', ['F', '-'], ['G', '+'] ]);

my $ai = AI::ExpertSystem::Advanced->new(
    viewer_class => 'terminal',
    knowledge_db => $yaml_kdb,
    initial_facts_dict => $initial_facts_dict,
);
于 2013-03-24T17:16:06.847 に答える