Nesta atividade iremos rodar o Hello World da arquitetura SOAR, explicar o funcionamento do script e da memória de trabalho.
Faça os seguintes passos:
1. Abra o programa “SoarJavaDebugger”
2. Clique em “File” -> “Load source file…”
3. Navegue até o diretório no qual o SOAR foi descompactado
4. Abra as pastas “Agents” -> “hello-world-rule”
5. Carregue o arquivo “hello-world-rule.soar”
6. Clique em “Run”
7. Observe a saída na imagem abaixo:
O arquivo carregado e executado possui a seguinte estrutura (exceto a numeração das linhas):
# | Exemplo | Esquema geral |
01. 02. 03. 04. 05. 06. | sp {hello-world (state <s> ^type state) --> (write |Hello World|) (halt) } | sp {nome*da*regra (condição 1) (condição 2) --> (ação 1) (ação 2)} |
Na linha 01, o símbolo comando “sp” significa “soar production” e é utilizado para identificar o início de cada regra, as quais são declaradas dentro dos braços “{ }” presentes nas linhas 01 e 06. Ainda na linha 01, depois de abrir o corpo da regra, devemos nomeá-la. No caso, nossa regra se chama “hello-world”.
Na linha 02, temos o conteúdo da cláusula IF da regra na qual armazenamos as condições de ocorrência. Nossa regra possui apenas uma condição “(state <s> ^type state)”, na qual o primeiro state é uma palavra reservada para indicar o início de uma regra (as quais sempre são escritas entre parênteses), o símbolo <s> é uma variável que armazena o identificador da regra, o símbolo “^type” é um atributo chamado tipo (sabemos que se trata de um atributo pelo início ‘^’) e por fim o último state é o valor do atributo desta condição. Assim sendo, sabemos que existe uma condição que diz que o identificador s possui um atributo com valor state.
A linha 03 apenas separa as partes IF e THEN da regra.
Nas linhas 04 e 05 temos o conteúdo da cláusula THEN da regra, as quais sempre armazenam as ações a serem tomadas. A ação da linha 04 imprime na saída padrão do SOAR o termo escrito entre barras ‘|’, no caso a string “Hello World”. A ação da linha 05 é uma palavra reservada para parar a execução do agente em questão.
A memória de trabalho é constituída de elementos individuais que são triplas de um identificador, um atributo e seu valor, o qual pode ser tanto uma constante quanto outro identificador, compondo uma estrutura em árvore. Cada tripla deve ser escrita entre parênteses.
Ao executar um agente, verificamos na memória de trabalho se o conjunto de condições é satisfeito (se existem na memória de trabalho), e caso o seja, executamos as ações indicadas.
Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer