function main($argc, $argv) { if ($argc < 2 || $argc > 3) { usage($argv[0]); } // Als '-v' is meegegeven tijdens het starten, ga in verbose mode if ($argv[1] == '-v') { verbose(true); $argc--; array_shift($argv); } else { verbose(false); } // Reader voor de XML-bestanden $reader = new KnowledgeBaseReader(); // Parse een xml-bestand (het eerste argument) tot knowledge base $state = $reader->parse($argv[1]); // Start de solver, dat ding dat kan infereren $solver = new Solver(); // leid alle goals in de knowledge base af. $goals = $state->goals; // Begin met de doelen die we hebben op de goal stack te zetten foreach ($goals as $goal) { $state->goalStack->push($goal->name); } // Zo lang we nog vragen kunnen stellen, stel ze while (($question = $solver->solveAll($state)) instanceof AskedQuestion) { $answer = cli_ask($question); if ($answer instanceof Option) { $state->apply($answer->consequences, Yes::because("User answered '{$answer->description}' to '{$question->description}'")); } } // Geen vragen meer, print de gevonden oplossingen. foreach ($goals as $goal) { printf("%s: %s\n", $goal->description, $goal->answer($state)->description); } }
private function readState($file) { $reader = new KnowledgeBaseReader(); $state = $reader->parse($file); return $state; }
<?php include '../util.php'; include '../solver.php'; include '../reader.php'; include '../formatter.php'; if (!preg_match('/^[a-zA-Z0-9_\\-\\.]+\\.xml$/i', $_GET['kb'])) { die('Doe eens niet!'); } $reader = new KnowledgeBaseReader(); $state = $reader->parse(first_found_path(array('./' . $_GET['kb'], '../knowledgebases/' . $_GET['kb']))); class FactStatistics { public $name; public $values; public function __construct($name) { $this->name = $name; $this->values = new Map(function () { return new FactValueStatistics(); }); } } class FactValueStatistics { public $inferringRules; public $dependingRules; public $inferringQuestions; public function __construct() { $this->inferringRules = new Set();