(defrule MAIN::areaDoImovel ?fato <- (resposta (tipo areaImovel)) => (printout t "Digite a area maxima do imovel :" crlf) (bind ?x (read)) (slot-set dadosImovel areaImovel ?x) (assert (MAIN::resposta (tipo busca_))) (retract ?fato)) *********************************************************** (defrule MAIN::consultaApartamento (resposta (tipo buscaApartamento)) (tipoMovel (tipoMovel ?r)) (object (is-a ?r) (OBJECT ?o) (Aluguel ?ehAluguel) (PrecoVenda ?precoVenda) (Area ?area) (End ?e) (Venda ?ehVenda) (PrecoAluguel ?precoAluguel) (Prox_Escola ?proxEscola) (TV_Assinatura ?temTVAssinatura) (Prox_Hospital ?proxHospital) (Iluminado ?ehIluminado) (Prox_Ponto_de_Onibus ?proxOnibus) (Piscina ?temPiscina) (Dependencia ?temDependencia) (Prox_Supermercado ?proxMercado) (Closets ?temCloset) (Quartos ?numQuartos) (Salao_de_Jogos ?salaoJogos) (Condominio ?cond)) => (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 venda: " ?precoVenda crlf) (printout t "Area: " ?area crlf crlf)))))))))))))))) ********************************************************** (defrule MAIN::consultaApartamentoPraia (resposta (tipo buscaApartamentoPraia)) (tipoMovel (tipoMovel ?r)) (object (is-a ?r) (OBJECT ?o) (Aluguel ?ehAluguel) (PrecoVenda ?precoVenda) (Area ?area) (End ?e) (Venda ?ehVenda) (PrecoAluguel ?precoAluguel) (Prox_Escola ?proxEscola) (TV_Assinatura ?temTVAssinatura) (Prox_Hospital ?proxHospital) (Iluminado ?ehIluminado) (Prox_Ponto_de_Onibus ?proxOnibus) (Piscina ?temPiscina) (Dependencia ?temDependencia) (Prox_Supermercado ?proxMercado) (Closets ?temCloset) (Quartos ?numQuartos) (Distancia_da_Praia ?distPraia) (Salao_de_Jogos ?salaoJogos) (Condominio ?cond)) => (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 venda: " ?precoVenda crlf) (printout t "Area: " ?area crlf crlf))))))))))))))))) ********************************************************** (defrule MAIN::consultaCasa (resposta (tipo buscaCasa)) (tipoMovel (tipoMovel ?r)) (object (is-a ?r) (OBJECT ?o) (Aluguel ?ehAluguel) (PrecoVenda ?precoVenda) (Area ?area) (End ?e) (Venda ?ehVenda) (PrecoAluguel ?precoAluguel) (Prox_Escola ?proxEscola) (TV_Assinatura ?temTVAssinatura) (Prox_Hospital ?proxHospital) (Iluminado ?ehIluminado) (Prox_Ponto_de_Onibus ?proxOnibus) (Piscina ?temPiscina) (Dependencia ?temDependencia) (Prox_Supermercado ?proxMercado) (Closets ?temCloset) (Quartos ?numQuartos) (Casa_de_Cachorro ?temCachorro)) => (if (= (slot-get dadosImovel compraAluguel) 1) then (printout t "1" crlf) (if (and (= ?ehVenda TRUE) (<= ?precoVenda (slot-get dadosImovel precoImovel))) then (printout t "2" crlf) (if (and (<= ?area (slot-get dadosImovel areaImovel)) (<= ?numQuartos (slot-get dadosImovel numQuartos))) then (printout t "3 " (slot-get dadosImovel casaCachorro) " " ?temCachorro crlf) (if (or (= (slot-get dadosImovel casaCachorro) ?temCachorro) (and (slot-get dadosImovel casaCachorro) FALSE) (= ?temCachorro nil)) then (printout t "4" crlf) (if (or (= (slot-get dadosImovel temCloset) ?temCloset) (and (slot-get dadosImovel temCloset) FALSE) (= ?temCloset nil)) then (printout t "5" crlf) (if (or (= (slot-get dadosImovel temDependencia) ?temDependencia) (and (slot-get dadosImovel temDependencia) FALSE) (= ?temDependencia nil)) then (printout t "6" crlf) (if (or (= (slot-get dadosImovel iluminado) ?ehIluminado) (and (slot-get dadosImovel iluminado) FALSE) (= ?ehIluminado nil)) then (printout t "7" crlf) (if (or (= (slot-get dadosImovel temPiscina) ?temPiscina) (and (slot-get dadosImovel temPiscina) FALSE) (= ?temPiscina nil)) then (printout t "8" crlf) (if (or (= (slot-get dadosImovel proxEscola) ?proxEscola) (and (slot-get dadosImovel proxEscola) FALSE) (= ?proxEscola nil)) then (printout t "9" crlf) (if (or (= (slot-get dadosImovel proxHospital) ?proxHospital) (and (slot-get dadosImovel proxHospital) FALSE) (= ?proxHospital nil)) then (printout t "10" crlf) (if (or (= (slot-get dadosImovel proxOnibus) ?proxOnibus) (and (slot-get dadosImovel proxOnibus) FALSE) (= ?proxOnibus nil)) then (printout t "11" crlf) (if (or (= (slot-get dadosImovel proxSupermercado) ?proxMercado) (and (slot-get dadosImovel proxSupermercado) FALSE) (= ?proxMercado nil)) then (printout t "12" crlf) (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 venda: " ?precoVenda crlf) (printout t "Area: " ?area crlf crlf))))))))))))))) ********************************************************** (defrule MAIN::consultaCasaPraia (resposta (tipo buscaCasaPraia)) (tipoMovel (tipoMovel ?r)) (object (is-a ?r) (OBJECT ?o) (Aluguel ?ehAluguel) (PrecoVenda ?precoVenda) (Area ?area) (End ?e) (Venda ?ehVenda) (PrecoAluguel ?precoAluguel) (Prox_Escola ?proxEscola) (TV_Assinatura ?temTVAssinatura) (Prox_Hospital ?proxHospital) (Iluminado ?ehIluminado) (Prox_Ponto_de_Onibus ?proxOnibus) (Piscina ?temPiscina) (Dependencia ?temDependencia) (Prox_Supermercado ?proxMercado) (Closets ?temCloset) (Quartos ?numQuartos) (Casa_de_Cachorro ?temCachorro) (Distancia_da_Praia ?distPraia)) => (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 venda: " ?precoVenda crlf) (printout t "Area: " ?area crlf crlf)))))))))))))))) ********************************************************** (defrule MAIN::consultaEstabelecimento (resposta (tipo buscaEstabelecimento)) (tipoMovel (tipoMovel ?r)) (object (is-a ?r) (OBJECT ?o) (Aluguel ?ehAluguel) (PrecoVenda ?precoVenda) (Area ?area) (End ?e) (Venda ?ehVenda) (PrecoAluguel ?precoAluguel)) => (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 MAIN::dist ?fato <- (resposta (tipo distancia)) => (printout t "Digite a latitude e a longitude de referencia: " crlf) (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::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 (MAIN::resposta (tipo precoImovel))) (retract ?fato)) ********************************************************** (defrule MAIN::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 MAIN::numQuartos ?fato <- (resposta (tipo numQuartos)) => (printout t "Voce deseja que o imovel tenha quantos quartos? " crlf) (bind ?x (read)) (slot-set dadosImovel numQuartos ?x) (if (= ?*ehPraia* TRUE) then (assert (MAIN::resposta (tipo distPraia)))) (if (= ?*ehPraia* FALSE) then (assert (MAIN::resposta (tipo precoImovel)))) (retract ?fato)) ********************************************************* (defrule MAIN::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 (MAIN::resposta (tipo areaImovel))) (retract ?fato)) ********************************************************* (defrule MAIN::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 (MAIN::resposta (tipo proxSupermercado))) (retract ?fato)) ********************************************************* (defrule MAIN::proxSupermercado ?fato <- (resposta (tipo proxSupermercado)) => (printout t "Exige que tenha supermercado proximo? (TRUE/FALSE)" crlf) (bind ?x (read)) (slot-set dadosImovel proxSupermercado ?x) (assert (MAIN::resposta (tipo temPiscina))) (retract ?fato)) ********************************************************* (defrule MAIN::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 (MAIN::resposta (tipo tvAssinatura))) (retract ?fato)) ********************************************************* (defrule MAIN::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 (MAIN::resposta (tipo proximoHospital))) (retract ?fato)) ********************************************************* (defrule MAIN::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 (MAIN::resposta (tipo iluminado))) (retract ?fato)) ********************************************************* (defrule MAIN::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 (MAIN::resposta (tipo condominio))) (retract ?fato)) ********************************************************* (defrule MAIN::start (initial-fact) => (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 MAIN::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 (MAIN::resposta (tipo numQuartos))) (retract ?fato)) ********************************************************* (defrule MAIN::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 (MAIN::resposta (tipo temDependencia))) (retract ?fato)) ********************************************************* (defrule MAIN::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 (MAIN::resposta (tipo temCasaCachorro)))) (if (= ?*residencia* 2) then (assert (MAIN::resposta (tipo salaoDeJogos)))) (retract ?fato)) ********************************************************* (defrule MAIN::temPiscina ?fato <- (resposta (tipo temPiscina)) => (printout t "Exige que tenha piscina? (TRUE/FALSE)" crlf) (bind ?x (read)) (slot-set dadosImovel temPiscina ?x) (assert (MAIN::resposta (tipo temCloset))) (retract ?fato)) ********************************************************* (defrule MAIN::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 (MAIN::resposta (tipo proximoEscola))) (retract ?fato)) ********************************************************* (defrule MAIN::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 (MAIN::resposta (tipo proximoEscola))) (retract ?fato)) ********************************************************* (defrule MAIN::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 (MAIN::resposta (tipo comercial)))) (if (= ?x 2) then (assert (MAIN::resposta (tipo residencial)))) (retract ?fato)) ******************************************************** (defrule MAIN::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 (MAIN::resposta (tipo casa))) (bind ?*residencia* 1)) (if (= ?x 2) then (assert (MAIN::resposta (tipo apartamento))) (bind ?*residencia* 2)) (retract ?fato)) ******************************************************** (defrule MAIN::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 (MAIN::resposta (tipo precoImovel))) (retract ?fato)) ******************************************************** (defrule MAIN::tvAssinatura ?fato <- (resposta (tipo tvAssinatura)) => (printout t "Exige TV por Assinatura? (TRUE/FALSE)" crlf) (bind ?x (read)) (slot-set dadosImovel tvAssinatura ?x) (assert (MAIN::resposta (tipo proxOnibus))) (retract ?fato)) ******************************************************** (defrule MAIN::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 (MAIN::resposta (tipo numQuartos))) (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))) ******************************************************** (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))) ******************************************************** (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))))))))))))) ********************************************************* (defglobal ?*ehPraia* = FALSE) (defglobal ?*residencia* = 0) (defglobal ?*tipoImovel* = 0) ********************************************************* (deftemplate MAIN::resposta (slot tipo)) (deftemplate MAIN::tipoMovel (slot tipoMovel)) *********************************************************