(deftemplate resposta (slot tipo) ) (deftemplate MAIN::tipoMovel (slot tipoMovel)) (defglobal ?*residencia* = 0) (defglobal ?*ehPraia* = FALSE) (defglobal ?*tipoImovel* = 0) (deffunction verificarTipoImovel(?imovel) (if (= ?imovel 1) then (return Urbana) else (if (= ?imovel 2) then (return Campo) else (if (= ?imovel 3) then (return Casa_de_Praia) else (if (= ?imovel 4) then (return Duplex) else (if (= ?imovel 5) then (return Triplex) else (if (= ?imovel 6) then (return Quitinete) else (if (= ?imovel 7) then (return Simples) else (if (= ?imovel 8) then (return Apartamento_de_Praia) else (if (= ?imovel 9) then (return Galpao) else (if (= ?imovel 10) then (return Sala_Comercial) else (if (= ?imovel 11) then (return Escritorio) )))))))))))) (deffunction fdist (?x1 ?y1 ?x2 ?y2) (return (sqrt (+ (** (- ?x1 ?x2) 2) (** (- ?y1 ?y2) 2)))) ) (deffunction isPerto (?x1 ?y1 ?x2 ?y2) (bind ?value (fdist ?x1 ?y1 ?x2 ?y2)) (if (< ?value 0.013759) then (return TRUE) else (return FALSE)) ) *************Regras********************************************************************** (defrule MAIN::dist ?fato <- (resposta (tipo distancia)) => (printout t "Digite a latitude e a longitude de referencia: ") (bind ?x (read)) (bind ?y (read)) (slot-set dadosImovel eixoX ?x) (slot-set dadosImovel eixoY ?y) (assert (MAIN::resposta (tipo verDistancia))) (retract ?fato) ) (defrule MAIN::verificarDistancia (resposta (tipo verDistancia)) (object (is-a Endereco) (OBJECT ?end) (Logradouro ?rua)) => (bind ?loc (slot-get ?end Localizacao_Imovel)) (bind ?x1 (slot-get ?loc Latitude)) (bind ?y1 (slot-get ?loc Longitude)) (bind ?x2 (slot-get dadosImovel eixoX)) (bind ?y2 (slot-get dadosImovel eixoY)) (bind ?value (isPerto ?x1 ?y1 ?x2 ?y2)) (if (= ?value TRUE) then (printout t ?rua crlf)) ) (defrule start => (printout t "Digite 1 para compra, digite 2 para aluguel de imovel ou 3 para procurar ruas por proximidade (coordenadas): " crlf) (bind ?x (read)) (if (or (= ?x 1) (= ?x 2)) then (slot-set dadosImovel compraAluguel ?x) (assert (MAIN::resposta (tipo negocio)))) (if (= ?x 3) then (assert (MAIN::resposta (tipo distancia)))) ) (defrule tipoDeImovel ?fato<-(resposta (tipo negocio)) => (printout t "Digite o tipo de imovel. Digite 1 para estabelecimento comercial e 2 para residencial." crlf) (bind ?x (read)) (slot-set dadosImovel tipoImovel ?x) (if(= ?x 1) then (assert (resposta (tipo comercial)))) (if(= ?x 2) then (assert (resposta (tipo residencial)))) (retract ?fato) ) (defrule tipoDoEstabelecimento ?fato<-(resposta (tipo comercial)) => (printout t "Para galpao digite 9, para sala comercial digite 10, para escritorio digite 11" crlf) (bind ?x (read)) (slot-set dadosImovel imovelDesejado ?x) (assert (resposta (tipo precoImovel))) (retract ?fato) ) (defrule precoDoImovel ?fato<-(resposta (tipo precoImovel)) => (printout t "Digite o preco maximo para negociacao do imovel : " crlf) (bind ?x (read)) (slot-set dadosImovel precoImovel ?x) (assert (resposta (tipo areaImovel))) (retract ?fato) ) (defrule areaDoImovel ?fato<-(resposta (tipo areaImovel)) => (printout t "Digite a area maxima do imovel :" crlf) (bind ?x (read)) (slot-set dadosImovel areaImovel ?x) (assert (resposta (tipo busca_))) (retract ?fato) ) *************************************************************** (defrule tipoDeMoradia ?fato<-(resposta (tipo residencial)) => (printout t "Digite o tipo de residência. Digite 1 para casa e 2 para apartamento :" crlf) (bind ?x (read)) (slot-set dadosImovel tipoMoradia ?x) (if(= ?x 1) then (assert (resposta (tipo casa))) (bind ?*residencia* 1)) (if(= ?x 2) then (assert (resposta (tipo apartamento))) (bind ?*residencia* 2)) (retract ?fato) ) (defrule tipoDeCasa ?fato<-(resposta (tipo casa)) => (printout t "Digite o tipo de residencia 1 para casa urbana, 2 para casa de campo, 3 para casa de praia : " crlf) (bind ?x (read)) (slot-set dadosImovel imovelDesejado ?x) (if (= ?x 3) then (bind ?*ehPraia* TRUE)) (assert (resposta (tipo proximoEscola))) (retract ?fato) ) (defrule tipoDeApartamento ?fato<-(resposta (tipo apartamento)) => (printout t "Digite o tipo de residencia. 4 para duplex, 5 para triplex, 6 para quitinete, 7 para apartamento simples e 8 para apartamento de praia : " crlf) (bind ?x (read)) (slot-set dadosImovel imovelDesejado ?x) (if (= ?x 5) then (bind ?*ehPraia* TRUE)) (assert (resposta (tipo proximoEscola))) (retract ?fato) ) **************************************************************** (defrule residencialProxEscola ?fato<-(resposta (tipo proximoEscola)) => (printout t "Voce exige que seja proximo a Escola? (TRUE/FALSE)" crlf) (bind ?x (read)) (slot-set dadosImovel proxEscola ?x) (assert (resposta (tipo proximoHospital))) (retract ?fato) ) (defrule residencialProxHospital ?fato<-(resposta (tipo proximoHospital)) => (printout t "Voce exige que seja proximo a Hospital? (TRUE/FALSE)" crlf) (bind ?x (read)) (slot-set dadosImovel proxHospital ?x) (assert (resposta (tipo iluminado))) (retract ?fato) ) (defrule residencialIluminado ?fato<-(resposta (tipo iluminado)) => (printout t "Voce exige que o local seja iluminado? (TRUE/FALSE)" crlf) (bind ?x (read)) (slot-set dadosImovel iluminado ?x) (assert (resposta (tipo tvAssinatura))) (retract ?fato) ) (defrule tvAssinatura ?fato <- (resposta (tipo tvAssinatura)) => (printout t "Exige TV por Assinatura? (TRUE/FALSE)" crlf) (bind ?x (read)) (slot-set dadosImovel tvAssinatura ?x) (assert (resposta (tipo proxOnibus))) (retract ?fato) ) (defrule proxOnibus ?fato<-(resposta (tipo proxOnibus)) => (printout t "Exige que tenha parada de onibus proxima? (TRUE/FALSE)" crlf) (bind ?x (read)) (slot-set dadosImovel proxOnibus ?x) (assert (resposta (tipo proxSupermercado))) (retract ?fato) ) (defrule proxSupermercado ?fato<-(resposta (tipo proxSupermercado)) => (printout t "Exige que tenha supermercado proximo? (TRUE/FALSE)" crlf) (bind ?x (read)) (slot-set dadosImovel proxSupermercado ?x) (assert (resposta (tipo temPiscina))) (retract ?fato) ) (defrule temPiscina ?fato<-(resposta (tipo temPiscina)) => (printout t "Exige que tenha piscina? (TRUE/FALSE)" crlf) (bind ?x (read)) (slot-set dadosImovel temPiscina ?x) (assert (resposta (tipo temCloset))) (retract ?fato) ) ***************************************************** (defrule temCloset ?fato<-(resposta (tipo temCloset)) => (printout t "Voce deseja que o imovel tenha closet? (TRUE/FALSE)" crlf) (bind ?x (read)) (slot-set dadosImovel temCloset ?x) (assert (resposta (tipo temDependencia))) (retract ?fato) ) (defrule temDependencia ?fato<-(resposta (tipo temDependencia)) => (printout t "Voce deseja que o imovel tenha dependencia? (TRUE/FALSE)" crlf) (bind ?x (read)) (slot-set dadosImovel temDependencia ?x) (if (= ?*residencia* 1) then (assert (resposta (tipo temCasaCachorro)))) (if (= ?*residencia* 2) then (assert (resposta (tipo salaoDeJogos)))) (retract ?fato) ) (defrule temCasaDeCachorro ?fato<-(resposta (tipo temCasaCachorro)) => (printout t "Voce deseja que o imovel tenha casa de cachorro? (TRUE/FALSE)" crlf) (bind ?x (read)) (slot-set dadosImovel casaCachorro ?x) (assert (resposta (tipo numQuartos))) (retract ?fato) ) (defrule salaoDeJogos ?fato<-(resposta (tipo salaoDeJogos)) => (printout t "Exige que tenha salao de jogos? (TRUE/FALSE)" crlf) (bind ?x (read)) (slot-set dadosImovel salaoDeJogos ?x) (assert (resposta (tipo condominio))) (retract ?fato) ) (defrule valorDoCondominio ?fato<-(resposta (tipo condominio)) => (printout t "Digite o valor máximo do condomínio : " crlf) (bind ?x (read)) (slot-set dadosImovel valorCondominio ?x) (assert (resposta (tipo numQuartos))) (retract ?fato) ) **************************************************** (defrule numQuartos ?fato<-(resposta (tipo numQuartos)) => (printout t "Voce deseja que o imovel tenha quartos? (TRUE/FALSE)" crlf) (bind ?x (read)) (slot-set dadosImovel numQuartos ?x) (if (= ?*ehPraia* TRUE) then (assert (resposta (tipo distPraia)))) (if (= ?*ehPraia* FALSE) then (assert (resposta (tipo precoImovel)))) (retract ?fato) ) (defrule distPraia ?fato<-(resposta (tipo distPraia)) => (printout t "Voce deseja que distancia maxima da praia (em metros)?" crlf) (bind ?x (read)) (slot-set dadosImovel distPraia ?x) (assert (resposta (tipo precoImovel))) (retract ?fato) ) (defrule imprimir ?fato<-(resposta (tipo busca_)) => (printout t "Imoveis disponíveis: " crlf crlf) (bind ?*tipoImovel* (verificarTipoImovel (slot-get dadosImovel imovelDesejado))) (if (= ?*tipoImovel* Urbana) then (assert (MAIN::resposta (tipo buscaCasa)))) (if (= ?*tipoImovel* Campo) then (assert (MAIN::resposta (tipo buscaCasa)))) (if (= ?*tipoImovel* Casa_de_Praia) then (assert (MAIN::resposta (tipo buscaCasaPraia)))) (if (= ?*tipoImovel* Duplex) then (assert (MAIN::resposta (tipo buscaApartamento)))) (if (= ?*tipoImovel* Triplex) then (assert (MAIN::resposta (tipo buscaApartamento)))) (if (= ?*tipoImovel* Quitinete) then (assert (MAIN::resposta (tipo buscaApartamento)))) (if (= ?*tipoImovel* Simples) then (assert (MAIN::resposta (tipo buscaApartamento)))) (if (= ?*tipoImovel* Apartamento_de_Praia) then (assert (MAIN::resposta (tipo buscaApartamentoPraia)))) (if (= ?*tipoImovel* Galpao) then (assert (MAIN::resposta (tipo buscaEstabelecimento)))) (if (= ?*tipoImovel* Sala_Comercial) then (assert (MAIN::resposta (tipo buscaEstabelecimento)))) (if (= ?*tipoImovel* Escritorio) then (assert (MAIN::resposta (tipo buscaEstabelecimento)))) (assert (MAIN::tipoMovel (tipoMovel ?*tipoImovel*))) (retract ?fato) ) (defrule consultaEstabelecimento (resposta (tipo buscaEstabelecimento)) (tipoMovel (tipoMovel ?r)) (object (is-a ?r) (OBJECT ?o) (Aluguel ?ehAluguel) (Venda ?ehVenda) (PrecoAluguel ?precoAluguel) (PrecoVenda ?precoVenda) (Area ?area) (End ?e)) => (if (= (slot-get dadosImovel compraAluguel) 1) then (if (and (= ?ehVenda TRUE) (<= ?precoVenda (slot-get dadosImovel precoImovel))) then (if (<= ?area (slot-get dadosImovel areaImovel)) then (printout t "Logradouro: " (slot-get ?e Logradouro) crlf) (printout t "Bairro: " (slot-get ?e Bairro) crlf) (printout t "Cidade/UF: " (slot-get ?e Cidade) "/" (slot-get ?e UF) crlf) (printout t "Preço venda: " ?precoVenda crlf) (printout t "Area: " ?area crlf crlf)))) (if (= (slot-get dadosImovel compraAluguel) 2) then (if (and (= ?ehAluguel TRUE) (<= ?precoAluguel (slot-get dadosImovel precoImovel))) then (if (<= ?area (slot-get dadosImovel areaImovel)) then (printout t "Logradouro: " (slot-get ?e Logradouro) crlf) (printout t "Bairro: " (slot-get ?e Bairro) crlf) (printout t "Cidade/UF: " (slot-get ?e Cidade) "/" (slot-get ?e UF) crlf) (printout t "Preço aluguel: " ?precoAluguel crlf) (printout t "Area: " ?area crlf crlf)))) ) (defrule consultaCasa (resposta (tipo buscaCasa)) (tipoMovel (tipoMovel ?r)) (object (is-a ?r) (OBJECT ?o) (Aluguel ?ehAluguel) (Venda ?ehVenda) (PrecoAluguel ?precoAluguel) (PrecoVenda ?precoVenda) (Area ?area) (End ?e) (Quartos ?numQuartos) (Casa_de_Cachorro ?temCachorro) (Closets ?temCloset) (Dependencia ?temDependencia) (Iluminado ?ehIluminado) (Piscina ?temPiscina) (Prox_Escola ?proxEscola) (Prox_Hospital ?proxHospital) (Prox_Ponto_de_Onibus ?proxOnibus) (Prox_Supermercado ?proxMercado) (TV_Assinatura ?temTVAssinatura)) => (if (= (slot-get dadosImovel compraAluguel) 1) then (if (and (= ?ehVenda TRUE) (<= ?precoVenda (slot-get dadosImovel precoImovel))) then (if (and (<= ?area (slot-get dadosImovel areaImovel)) (<= ?numQuartos (slot-get dadosImovel numQuartos))) then (if (or (= (slot-get dadosImovel casaCachorro) ?temCachorro) (and (slot-get dadosImovel casaCachorro) FALSE) (=?temCachorro nil)) then (if (or (= (slot-get dadosImovel temCloset) ?temCloset) (and (slot-get dadosImovel temCloset) FALSE) (=?temCloset nil)) then (if (or (= (slot-get dadosImovel temDependencia) ?temDependencia) (and (slot-get dadosImovel temDependencia) FALSE) (=?temDependencia nil)) then (if (or (= (slot-get dadosImovel iluminado) ?ehIluminado) (and (slot-get dadosImovel iluminado) FALSE) (=?ehIluminado nil)) then (if (or (= (slot-get dadosImovel temPiscina) ?temPiscina) (and (slot-get dadosImovel temPiscina) FALSE) (=?temPiscina nil)) then (if (or (= (slot-get dadosImovel proxEscola) ?proxEscola) (and (slot-get dadosImovel proxEscola) FALSE) (=?proxEscola nil)) then (if (or (= (slot-get dadosImovel proxHospital) ?proxHospital) (and (slot-get dadosImovel proxHospital) FALSE) (=?proxHospital nil)) then (if (or (= (slot-get dadosImovel proxOnibus) ?proxOnibus) (and (slot-get dadosImovel proxOnibus) FALSE) (=?proxOnibus nil)) then (if (or (= (slot-get dadosImovel proxSupermercado) ?proxMercado) (and (slot-get dadosImovel proxSupermercado) FALSE) (=?proxMercado nil)) then (if (or (= (slot-get dadosImovel tvAssinatura) ?temTVAssinatura) (and (slot-get dadosImovel tvAssinatura) FALSE) (=?temTVAssinatura nil)) then (printout t "Logradouro: " (slot-get ?e Logradouro) crlf) (printout t "Bairro: " (slot-get ?e Bairro) crlf) (printout t "Cidade/UF: " (slot-get ?e Cidade) "/" (slot-get ?e UF) crlf) (printout t "Preço venda: " ?precoVenda crlf) (printout t "Area: " ?area crlf crlf))))))))))))) ) (if (= (slot-get dadosImovel compraAluguel) 2) then (if (and (= ?ehAluguel TRUE) (<= ?precoAluguel (slot-get dadosImovel precoImovel))) then (if (and (<= ?area (slot-get dadosImovel areaImovel)) (<= ?numQuartos (slot-get dadosImovel numQuartos))) then (if (or (= (slot-get dadosImovel casaCachorro) ?temCachorro) (and (slot-get dadosImovel casaCachorro) FALSE) (=?temCachorro nil)) then (if (or (= (slot-get dadosImovel temCloset) ?temCloset) (and (slot-get dadosImovel temCloset) FALSE) (=?temCloset nil)) then (if (or (= (slot-get dadosImovel temDependencia) ?temDependencia) (and (slot-get dadosImovel temDependencia) FALSE) (=?temDependencia nil)) then (if (or (= (slot-get dadosImovel iluminado) ?ehIluminado) (and (slot-get dadosImovel iluminado) FALSE) (=?ehIluminado nil)) then (if (or (= (slot-get dadosImovel temPiscina) ?temPiscina) (and (slot-get dadosImovel temPiscina) FALSE) (=?temPiscina nil)) then (if (or (= (slot-get dadosImovel proxEscola) ?proxEscola) (and (slot-get dadosImovel proxEscola) FALSE) (=?proxEscola nil)) then (if (or (= (slot-get dadosImovel proxHospital) ?proxHospital) (and (slot-get dadosImovel proxHospital) FALSE) (=?proxHospital nil)) then (if (or (= (slot-get dadosImovel proxOnibus) ?proxOnibus) (and (slot-get dadosImovel proxOnibus) FALSE) (=?proxOnibus nil)) then (if (or (= (slot-get dadosImovel proxSupermercado) ?proxMercado) (and (slot-get dadosImovel proxSupermercado) FALSE) (=?proxMercado nil)) then (if (or (= (slot-get dadosImovel tvAssinatura) ?temTVAssinatura) (and (slot-get dadosImovel tvAssinatura) FALSE) (=?temTVAssinatura nil)) then (printout t "Logradouro: " (slot-get ?e Logradouro) crlf) (printout t "Bairro: " (slot-get ?e Bairro) crlf) (printout t "Cidade/UF: " (slot-get ?e Cidade) "/" (slot-get ?e UF) crlf) (printout t "Preço aluguel: " ?precoAluguel crlf) (printout t "Area: " ?area crlf crlf))))))))))))) ) ) (defrule consultaCasaPraia (resposta (tipo buscaCasaPraia)) (tipoMovel (tipoMovel ?r)) (object (is-a ?r) (OBJECT ?o) (Aluguel ?ehAluguel) (Venda ?ehVenda) (PrecoAluguel ?precoAluguel) (PrecoVenda ?precoVenda) (Area ?area) (End ?e) (Quartos ?numQuartos) (Distancia_da_Praia ?distPraia) (Casa_de_Cachorro ?temCachorro) (Closets ?temCloset) (Dependencia ?temDependencia) (Iluminado ?ehIluminado) (Piscina ?temPiscina) (Prox_Escola ?proxEscola) (Prox_Hospital ?proxHospital) (Prox_Ponto_de_Onibus ?proxOnibus) (Prox_Supermercado ?proxMercado) (TV_Assinatura ?temTVAssinatura)) => (if (= (slot-get dadosImovel compraAluguel) 1) then (if (and (= ?ehVenda TRUE) (<= ?precoVenda (slot-get dadosImovel precoImovel))) then (if (and (<= ?area (slot-get dadosImovel areaImovel)) (<= ?numQuartos (slot-get dadosImovel numQuartos))) then (if (<= ?distPraia (slot-get dadosImovel distPraia)) then (if (or (= (slot-get dadosImovel casaCachorro) ?temCachorro) (and (slot-get dadosImovel casaCachorro) FALSE) (=?temCachorro nil)) then (if (or (= (slot-get dadosImovel temCloset) ?temCloset) (and (slot-get dadosImovel temCloset) FALSE) (=?temCloset nil)) then (if (or (= (slot-get dadosImovel temDependencia) ?temDependencia) (and (slot-get dadosImovel temDependencia) FALSE) (=?temDependencia nil)) then (if (or (= (slot-get dadosImovel iluminado) ?ehIluminado) (and (slot-get dadosImovel iluminado) FALSE) (=?ehIluminado nil)) then (if (or (= (slot-get dadosImovel temPiscina) ?temPiscina) (and (slot-get dadosImovel temPiscina) FALSE) (=?temPiscina nil)) then (if (or (= (slot-get dadosImovel proxEscola) ?proxEscola) (and (slot-get dadosImovel proxEscola) FALSE) (=?proxEscola nil)) then (if (or (= (slot-get dadosImovel proxHospital) ?proxHospital) (and (slot-get dadosImovel proxHospital) FALSE) (=?proxHospital nil)) then (if (or (= (slot-get dadosImovel proxOnibus) ?proxOnibus) (and (slot-get dadosImovel proxOnibus) FALSE) (=?proxOnibus nil)) then (if (or (= (slot-get dadosImovel proxSupermercado) ?proxMercado) (and (slot-get dadosImovel proxSupermercado) FALSE) (=?proxMercado nil)) then (if (or (= (slot-get dadosImovel tvAssinatura) ?temTVAssinatura) (and (slot-get dadosImovel tvAssinatura) FALSE) (=?temTVAssinatura nil)) then (printout t "Logradouro: " (slot-get ?e Logradouro) crlf) (printout t "Bairro: " (slot-get ?e Bairro) crlf) (printout t "Cidade/UF: " (slot-get ?e Cidade) "/" (slot-get ?e UF) crlf) (printout t "Preço venda: " ?precoVenda crlf) (printout t "Area: " ?area crlf crlf))))))))))))) ) (if (= (slot-get dadosImovel compraAluguel) 2) then (if (and (= ?ehAluguel TRUE) (<= ?precoAluguel (slot-get dadosImovel precoImovel))) then (if (and (<= ?area (slot-get dadosImovel areaImovel)) (<= ?numQuartos (slot-get dadosImovel numQuartos))) then (if (<= ?distPraia (slot-get dadosImovel distPraia)) then (if (or (= (slot-get dadosImovel casaCachorro) ?temCachorro) (and (slot-get dadosImovel casaCachorro) FALSE) (=?temCachorro nil)) then (if (or (= (slot-get dadosImovel temCloset) ?temCloset) (and (slot-get dadosImovel temCloset) FALSE) (=?temCloset nil)) then (if (or (= (slot-get dadosImovel temDependencia) ?temDependencia) (and (slot-get dadosImovel temDependencia) FALSE) (=?temDependencia nil)) then (if (or (= (slot-get dadosImovel iluminado) ?ehIluminado) (and (slot-get dadosImovel iluminado) FALSE) (=?ehIluminado nil)) then (if (or (= (slot-get dadosImovel temPiscina) ?temPiscina) (and (slot-get dadosImovel temPiscina) FALSE) (=?temPiscina nil)) then (if (or (= (slot-get dadosImovel proxEscola) ?proxEscola) (and (slot-get dadosImovel proxEscola) FALSE) (=?proxEscola nil)) then (if (or (= (slot-get dadosImovel proxHospital) ?proxHospital) (and (slot-get dadosImovel proxHospital) FALSE) (=?proxHospital nil)) then (if (or (= (slot-get dadosImovel proxOnibus) ?proxOnibus) (and (slot-get dadosImovel proxOnibus) FALSE) (=?proxOnibus nil)) then (if (or (= (slot-get dadosImovel proxSupermercado) ?proxMercado) (and (slot-get dadosImovel proxSupermercado) FALSE) (=?proxMercado nil)) then (if (or (= (slot-get dadosImovel tvAssinatura) ?temTVAssinatura) (and (slot-get dadosImovel tvAssinatura) FALSE) (=?temTVAssinatura nil)) then (printout t "Logradouro: " (slot-get ?e Logradouro) crlf) (printout t "Bairro: " (slot-get ?e Bairro) crlf) (printout t "Cidade/UF: " (slot-get ?e Cidade) "/" (slot-get ?e UF) crlf) (printout t "Preço aluguel: " ?precoAluguel crlf) (printout t "Area: " ?area crlf crlf)))))))))))))) ) ) (defrule consultaApartamento (resposta (tipo buscaApartamento)) (tipoMovel (tipoMovel ?r)) (object (is-a ?r) (OBJECT ?o) (Aluguel ?ehAluguel) (Venda ?ehVenda) (PrecoAluguel ?precoAluguel) (PrecoVenda ?precoVenda) (Area ?area) (End ?e) (Quartos ?numQuartos) (Condominio ?cond) (Closets ?temCloset) (Dependencia ?temDependencia) (Iluminado ?ehIluminado) (Piscina ?temPiscina) (Prox_Escola ?proxEscola) (Prox_Hospital ?proxHospital) (Prox_Ponto_de_Onibus ?proxOnibus) (Prox_Supermercado ?proxMercado) (TV_Assinatura ?temTVAssinatura) (Salao_de_Jogos ?salaoJogos)) => (if (= (slot-get dadosImovel compraAluguel) 1) then (if (and (= ?ehVenda TRUE) (<= ?precoVenda (slot-get dadosImovel precoImovel))) then (if (and (<= ?area (slot-get dadosImovel areaImovel)) (<= ?numQuartos (slot-get dadosImovel numQuartos))) then (if (<= ?cond (slot-get dadosImovel valorCondominio)) then (if (or (= (slot-get dadosImovel salaoDeJogos) ?salaoJogos) (and (slot-get dadosImovel salaoDeJogos) FALSE) (=?salaoJogos nil)) then (if (or (= (slot-get dadosImovel temCloset) ?temCloset) (and (slot-get dadosImovel temCloset) FALSE) (=?temCloset nil)) then (if (or (= (slot-get dadosImovel temDependencia) ?temDependencia) (and (slot-get dadosImovel temDependencia) FALSE) (=?temDependencia nil)) then (if (or (= (slot-get dadosImovel iluminado) ?ehIluminado) (and (slot-get dadosImovel iluminado) FALSE) (=?ehIluminado nil)) then (if (or (= (slot-get dadosImovel temPiscina) ?temPiscina) (and (slot-get dadosImovel temPiscina) FALSE) (=?temPiscina nil)) then (if (or (= (slot-get dadosImovel proxEscola) ?proxEscola) (and (slot-get dadosImovel proxEscola) FALSE) (=?proxEscola nil)) then (if (or (= (slot-get dadosImovel proxHospital) ?proxHospital) (and (slot-get dadosImovel proxHospital) FALSE) (=?proxHospital nil)) then (if (or (= (slot-get dadosImovel proxOnibus) ?proxOnibus) (and (slot-get dadosImovel proxOnibus) FALSE) (=?proxOnibus nil)) then (if (or (= (slot-get dadosImovel proxSupermercado) ?proxMercado) (and (slot-get dadosImovel proxSupermercado) FALSE) (=?proxMercado nil)) then (if (or (= (slot-get dadosImovel tvAssinatura) ?temTVAssinatura) (and (slot-get dadosImovel tvAssinatura) FALSE) (=?temTVAssinatura nil)) then (printout t "Logradouro: " (slot-get ?e Logradouro) crlf) (printout t "Bairro: " (slot-get ?e Bairro) crlf) (printout t "Cidade/UF: " (slot-get ?e Cidade) "/" (slot-get ?e UF) crlf) (printout t "Preço venda: " ?precoVenda crlf) (printout t "Area: " ?area crlf crlf)))))))))))))) ) (if (= (slot-get dadosImovel compraAluguel) 2) then (if (and (= ?ehAluguel TRUE) (<= ?precoAluguel (slot-get dadosImovel precoImovel))) then (if (and (<= ?area (slot-get dadosImovel areaImovel)) (<= ?numQuartos (slot-get dadosImovel numQuartos))) then (if (<= ?cond (slot-get dadosImovel valorCondominio)) then (if (or (= (slot-get dadosImovel salaoDeJogos) ?salaoJogos) (and (slot-get dadosImovel salaoDeJogos) FALSE) (=?salaoJogos nil)) then (if (or (= (slot-get dadosImovel temCloset) ?temCloset) (and (slot-get dadosImovel temCloset) FALSE) (=?temCloset nil)) then (if (or (= (slot-get dadosImovel temDependencia) ?temDependencia) (and (slot-get dadosImovel temDependencia) FALSE) (=?temDependencia nil)) then (if (or (= (slot-get dadosImovel iluminado) ?ehIluminado) (and (slot-get dadosImovel iluminado) FALSE) (=?ehIluminado nil)) then (if (or (= (slot-get dadosImovel temPiscina) ?temPiscina) (and (slot-get dadosImovel temPiscina) FALSE) (=?temPiscina nil)) then (if (or (= (slot-get dadosImovel proxEscola) ?proxEscola) (and (slot-get dadosImovel proxEscola) FALSE) (=?proxEscola nil)) then (if (or (= (slot-get dadosImovel proxHospital) ?proxHospital) (and (slot-get dadosImovel proxHospital) FALSE) (=?proxHospital nil)) then (if (or (= (slot-get dadosImovel proxOnibus) ?proxOnibus) (and (slot-get dadosImovel proxOnibus) FALSE) (=?proxOnibus nil)) then (if (or (= (slot-get dadosImovel proxSupermercado) ?proxMercado) (and (slot-get dadosImovel proxSupermercado) FALSE) (=?proxMercado nil)) then (if (or (= (slot-get dadosImovel tvAssinatura) ?temTVAssinatura) (and (slot-get dadosImovel tvAssinatura) FALSE) (=?temTVAssinatura nil)) then (printout t "Logradouro: " (slot-get ?e Logradouro) crlf) (printout t "Bairro: " (slot-get ?e Bairro) crlf) (printout t "Cidade/UF: " (slot-get ?e Cidade) "/" (slot-get ?e UF) crlf) (printout t "Preço aluguel: " ?precoAluguel crlf) (printout t "Area: " ?area crlf crlf)))))))))))))) ) ) (defrule consultaApartamentoPraia (resposta (tipo buscaApartamentoPraia)) (tipoMovel (tipoMovel ?r)) (object (is-a ?r) (OBJECT ?o) (Aluguel ?ehAluguel) (Venda ?ehVenda) (PrecoAluguel ?precoAluguel) (PrecoVenda ?precoVenda) (Area ?area) (End ?e) (Quartos ?numQuartos) (Condominio ?cond) (Distancia_da_Praia ?distPraia) (Closets ?temCloset) (Dependencia ?temDependencia) (Iluminado ?ehIluminado) (Piscina ?temPiscina) (Prox_Escola ?proxEscola) (Prox_Hospital ?proxHospital) (Prox_Ponto_de_Onibus ?proxOnibus) (Prox_Supermercado ?proxMercado) (TV_Assinatura ?temTVAssinatura) (Salao_de_Jogos ?salaoJogos)) => (if (= (slot-get dadosImovel compraAluguel) 1) then (if (and (= ?ehVenda TRUE) (<= ?precoVenda (slot-get dadosImovel precoImovel))) then (if (and (<= ?area (slot-get dadosImovel areaImovel)) (<= ?numQuartos (slot-get dadosImovel numQuartos))) then (if (<= ?cond (slot-get dadosImovel valorCondominio)) then (if (<= ?distPraia (slot-get dadosImovel distPraia)) then (if (or (= (slot-get dadosImovel salaoDeJogos) ?salaoJogos) (and (slot-get dadosImovel salaoDeJogos) FALSE) (=?salaoJogos nil)) then (if (or (= (slot-get dadosImovel temCloset) ?temCloset) (and (slot-get dadosImovel temCloset) FALSE) (=?temCloset nil)) then (if (or (= (slot-get dadosImovel temDependencia) ?temDependencia) (and (slot-get dadosImovel temDependencia) FALSE) (=?temDependencia nil)) then (if (or (= (slot-get dadosImovel iluminado) ?ehIluminado) (and (slot-get dadosImovel iluminado) FALSE) (=?ehIluminado nil)) then (if (or (= (slot-get dadosImovel temPiscina) ?temPiscina) (and (slot-get dadosImovel temPiscina) FALSE) (=?temPiscina nil)) then (if (or (= (slot-get dadosImovel proxEscola) ?proxEscola) (and (slot-get dadosImovel proxEscola) FALSE) (=?proxEscola nil)) then (if (or (= (slot-get dadosImovel proxHospital) ?proxHospital) (and (slot-get dadosImovel proxHospital) FALSE) (=?proxHospital nil)) then (if (or (= (slot-get dadosImovel proxOnibus) ?proxOnibus) (and (slot-get dadosImovel proxOnibus) FALSE) (=?proxOnibus nil)) then (if (or (= (slot-get dadosImovel proxSupermercado) ?proxMercado) (and (slot-get dadosImovel proxSupermercado) FALSE) (=?proxMercado nil)) then (if (or (= (slot-get dadosImovel tvAssinatura) ?temTVAssinatura) (and (slot-get dadosImovel tvAssinatura) FALSE) (=?temTVAssinatura nil)) then (printout t "Logradouro: " (slot-get ?e Logradouro) crlf) (printout t "Bairro: " (slot-get ?e Bairro) crlf) (printout t "Cidade/UF: " (slot-get ?e Cidade) "/" (slot-get ?e UF) crlf) (printout t "Preço venda: " ?precoVenda crlf) (printout t "Area: " ?area crlf crlf))))))))))))))) ) (if (= (slot-get dadosImovel compraAluguel) 2) then (if (and (= ?ehAluguel TRUE) (<= ?precoAluguel (slot-get dadosImovel precoImovel))) then (if (and (<= ?area (slot-get dadosImovel areaImovel)) (<= ?numQuartos (slot-get dadosImovel numQuartos))) then (if (<= ?cond (slot-get dadosImovel valorCondominio)) then (if (<= ?distPraia (slot-get dadosImovel distPraia)) then (if (or (= (slot-get dadosImovel salaoDeJogos) ?salaoJogos) (and (slot-get dadosImovel salaoDeJogos) FALSE) (=?salaoJogos nil)) then (if (or (= (slot-get dadosImovel temCloset) ?temCloset) (and (slot-get dadosImovel temCloset) FALSE) (=?temCloset nil)) then (if (or (= (slot-get dadosImovel temDependencia) ?temDependencia) (and (slot-get dadosImovel temDependencia) FALSE) (=?temDependencia nil)) then (if (or (= (slot-get dadosImovel iluminado) ?ehIluminado) (and (slot-get dadosImovel iluminado) FALSE) (=?ehIluminado nil)) then (if (or (= (slot-get dadosImovel temPiscina) ?temPiscina) (and (slot-get dadosImovel temPiscina) FALSE) (=?temPiscina nil)) then (if (or (= (slot-get dadosImovel proxEscola) ?proxEscola) (and (slot-get dadosImovel proxEscola) FALSE) (=?proxEscola nil)) then (if (or (= (slot-get dadosImovel proxHospital) ?proxHospital) (and (slot-get dadosImovel proxHospital) FALSE) (=?proxHospital nil)) then (if (or (= (slot-get dadosImovel proxOnibus) ?proxOnibus) (and (slot-get dadosImovel proxOnibus) FALSE) (=?proxOnibus nil)) then (if (or (= (slot-get dadosImovel proxSupermercado) ?proxMercado) (and (slot-get dadosImovel proxSupermercado) FALSE) (=?proxMercado nil)) then (if (or (= (slot-get dadosImovel tvAssinatura) ?temTVAssinatura) (and (slot-get dadosImovel tvAssinatura) FALSE) (=?temTVAssinatura nil)) then (printout t "Logradouro: " (slot-get ?e Logradouro) crlf) (printout t "Bairro: " (slot-get ?e Bairro) crlf) (printout t "Cidade/UF: " (slot-get ?e Cidade) "/" (slot-get ?e UF) crlf) (printout t "Preço aluguel: " ?precoAluguel crlf) (printout t "Area: " ?area crlf crlf))))))))))))))) ) )