Linguagem de expressão do conhecimento.
FACSI associa
o raciocínio lógico e aritmético possibilitando a avaliação de
expressões matemáticas que, segundo seus valores aritméticos
definem a verdade ou falsidade de um fato booleano. O especialista
expressa seu conhecimento na linguagem de FACSI através de
regras lógicas, definições aritméticas,
perguntas e expressões.
Regras
lógicas (ou cláusulas). Possibilitam a expressão das
relações lógicas que ligam diferentes fatos (proposições). As
regras são usadas pelo motor de inferência para avaliar o valor
das proposições, através de raciocínio lógico. São expressas na
sintaxe seguinte:
temos
p1 ou p2 ou ... pn
temos p1 ou p2 ou ... pn se q1 e q2 e ...
qm
não temos q1 e q2 e ... qm
onde
os pi's e os qi's são fatos (ou suas negações) representados por
identificadores, e são expressos em uma das seis formas seguintes:
<identificador> ou não <identificador>
<identificador>? ou não <identificador>?
<identificador>! ou não <identificador>!
Os
fatos representados por identificadores seguidos de um "?" são do
tipo "dado"; eles são sujeitos a serem perguntados ao usuário no
momento das consultas. Os fatos representados por identificadores
seguidos de um "!" são do tipo "resultado"; eles constituem a
informação relevante a ser comunicada ao usuário quando o sistema
os deduz.
Exemplos de
regras lógicas:
A afirmativa:
"O empréstimo deve ser recusado se os recursos do cliente estão
abaixo do normal" pode ser descrita da seguinte forma:
temos
emprestimo_recusado! se recursos_abaixo_do_normal?
A afirmativa:
"O empréstimo pode ser aceito se os recursos estão abaixo do
normal, se o emprego é bom, se o perfil é muito bom, se a
solvabilidade é média e se o objeto do empréstimo pode ser
financiado"
pode ser
descrita da seguinte forma:
temos emprestimo_aceito! se recursos_abaixo_normal? e
bom_emprego e
muito_bom_perfil e solvabilidade_media e
objeto_emprestimo_pode_ser_financiado!
Definições aritméticas. Possibilitam a
expressão de um dado booleano ou de um dado numérico. Elas são
usadas para avaliação aritmética e têm a seguinte sintaxe:
definimos d
como e
onde "d" é um
dado (booleano ou numérico) ou uma função, e "e" uma expressão
booleana ou aritmética, ou a chamada de uma função externa em C.
Exemplos de
definições aritméticas:
A afirmativa:
"A taxação é considerada acima do normal se o total das taxas é
maior do que o limite de seguridade social multiplicado por um
fator determinado pelo número de dependentes" pode ser descrita da
seguinte forma:
definimos
taxacao_acima_do_normal como total_taxas >
(limite_seguridade_social * fator_dependentes)
A afirmativa:
"A temperatura do forno é definida por uma função em C" pode ser
descrita da seguinte forma:
definimos
temperatura_forno como chamada_externa();
Perguntas. As perguntas associam a um dado um
texto que o substitui quando perguntas que o concernem são feitas
ao usuário. As perguntas podem, opcionalmente, indicar o tipo de
dado esperado na resposta do usuário. A sintaxe é a seguinte:
perguntamos
p com <texto>
perguntamos p, do tipo <tipo>, com
<texto>
onde "p" é um
dado (booleano ou numérico).
As perguntas
podem ser usadas para restringir as únicas respostas possíveis a
uma pergunta do sistema. Por exemplo:
perguntamos
projeto_homenshora, do tipo [0, 100], com "Qual a carga de
Homens/Hora do seu projeto?"
perguntamos profissão com "Qual é
a sua profissão?" ["advogado", "arquiteto", "analista de
sistemas", "médico", "outro"]
Expressões. São regras de composição de
mensagens, que facilitam para o usuário a interpretação dos
resultados inferidos pelo sistema, personalizando as mensagens de
diagnósticos (texto, áreas de mostra de dados, gráficos). Alguns
exemplos:
exprimimos
que aceitar eh verdade por "===> O sistema ACEITOU o
emprestimo.";
exprimimos que declinar eh x por "Declinar =
".declinar;
Outros tipos
de regras possibilitam ao especialista a organização da base de
fatos, cujo objetivo é a estruturação da base de acordo com alguns
critérios, visando a otimizar a consulta, sem interferir com o
raciocínio ou com os cálculos.