Skip to content

Instantly share code, notes, and snippets.

@gusbemacbe
Created October 3, 2017 15:11
Show Gist options
  • Save gusbemacbe/8ad836256edcfb5edbffe206cad6c9e8 to your computer and use it in GitHub Desktop.
Save gusbemacbe/8ad836256edcfb5edbffe206cad6c9e8 to your computer and use it in GitHub Desktop.
Star Wars – Unknown Regions Planets Questions
;----------- Módulo Principal -----------
(import nrc.fuzzy.*)
;Templates das Questões
(deftemplate questao
(slot texto)
(slot respostaTipo)
(slot topico))
;Template das Respostas
(deftemplate resposta
(slot texto)
(slot topico))
;Template das Sugestoes
(deftemplate sugestoes
(slot planeta)
(slot descricao)
(slot maisInfo))
;----------- Variavéis --------------
;A investigação da Aliança da Nova República em relação aos panetas perdidos das Região Desconhecida cujas informações armazenadas na robô Jess.
;Distância do Coruscant
(defglobal ?*gVarDistanciaDeCoruscant* = (new nrc.fuzzy.FuzzyVariable "distanciaDeCoruscant" 0.0 30000.0 "parsecs"))
;Temperatura dos Planetas
(defglobal ?*gVarTemperatura* = (new nrc.fuzzy.FuzzyVariable "temperatura" 0 8000 "K"))
;Planetas Vizinhos
(defglobal ?*gVarPlanetasVizinhos* = (new nrc.fuzzy.FuzzyVariable "distanciaPlanetasVizinhos" 0.0 400000.0 "d"))
;Raio em termos de unidades coruscantenses
(defglobal ?*gVarTamanho* = (new nrc.fuzzy.FuzzyVariable "tamanho" 0 500 "EU"))
;Quando o planeta foi descoberto
(defglobal ?*gVarDescobertaTempo* = (new nrc.fuzzy.FuzzyVariable "descoberta" 50000BBY 400ABY))
(call nrc.fuzzy.FuzzyValue setMatchThreshold 0.1)
;------------ Lista de Questões para ser Perguntadas ------------
(deffacts questao
"Sistema pergntou Questões"
(questao (topico distanciaDeCoruscant) (respostaTipo numero)
(texto "Q. A quantos parsecs longe de Coruscant o planeta deveria estar? [Escolha das opções 1 - 3]
1. Perto
2. Um pouco mais
3. Realmente muito longe
Escolha um numero - "))
(questao (topico temperatura) (respostaTipo numero)
(texto "Q. Quanta temperatura o planeta deveria ser? [Escolha das opções 1 - 4]
1. Muito quente
2. Quente
3. Normalmente quente
4. Frio
5. Muito frio
Escolha um numero - "))
(questao (topico distanciaPlanetasVizinhos) (respostaTipo number)
(texto "Q. A quão perto de sua estrela o planeta deveria estar? [Escolha das opções 1 - 3]
1. Muito perto
2. Não tão perto
3. Muito longe
Escolha um numero - "))
(questao (topico tamanho) (respostaTipo numero)
(text "Q. Quão grande o planeta deveria ser? [Escolha das opções 1 - 3]
1. Gigante
2. Como Coruscant
3. Pequeno
Escolha um numero - "))
(questao (topico descoberta) (respostaTipo numero)
(text "Q. Você quer um planeta dos recém-descobertos? [Escolha das opções 1 - 2]
1. Sim, muito recente.
2. Não, pode ser tão antigo.
Choose a number - "))
)
(defglobal ?*crlf* = " ")
;--------------- Funções para as respostas do mapa ---------------
(deffunction mapaDistanciaCoruscant (?ans)
"Mapeando a distância de Coruscant para um Valor"
(if (eq ?ans 1) then (assert (valdistanciaDeCoruscant (new nrc.fuzzy.FuzzyValue ?*gVarDistanciaDeCoruscant* "pertoA"))))
(if (eq ?ans 2) then (assert (valdistanciaDeCoruscant (new nrc.fuzzy.FuzzyValue ?*gVarDistanciaDeCoruscant* "longeA"))))
(if (eq ?ans 3) then (assert (valdistanciaDeCoruscant (new nrc.fuzzy.FuzzyValue ?*gVarDistanciaDeCoruscant* "muitoLonge"))))
)
(deffunction mapTemperatura (?ans)
"Mpaeando a Temperatura para o Valor"
(if (eq ?ans 1) then (assert (valTemperatura (new nrc.fuzzy.FuzzyValue ?*gVarTemperatura* "muitoQuente"))))
(if (eq ?ans 2) then (assert (valTemperatura (new nrc.fuzzy.FuzzyValue ?*gVarTemperatura* "quente"))))
(if (eq ?ans 3) then (assert (valTemperatura (new nrc.fuzzy.FuzzyValue ?*gVarTemperatura* "normalmente"))))
(if (eq ?ans 4) then (assert (valTemperatura (new nrc.fuzzy.FuzzyValue ?*gVarTemperatura* "frio"))))
(if (eq ?ans 5) then (assert (valTemperatura (new nrc.fuzzy.FuzzyValue ?*gVarTemperatura* "muitoFrio"))))
)
(deffunction mapdistanciaPlanetasVizinhos (?ans)
"Mapeando a distância de uma estrela vizinha para um valor"
(if (eq ?ans 1) then (assert (valdistanciaPlanetasVizinhos (new nrc.fuzzy.FuzzyValue ?*gVarPlanetasVizinhos* "pertoA"))))
(if (eq ?ans 2) then (assert (valdistanciaPlanetasVizinhos (new nrc.fuzzy.FuzzyValue ?*gVarPlanetasVizinhos* "longeA"))))
(if (eq ?ans 3) then (assert (valdistanciaPlanetasVizinhos (new nrc.fuzzy.FuzzyValue ?*gVarPlanetasVizinhos* "muitoLonge"))))
)
(deffunction mapaTamanho (?ans)
"Mapeando a distância do raio de um planeta para um valor"
(if (eq ?ans 1) then (assert (valTamanho (new nrc.fuzzy.FuzzyValue ?*gVarTamanho* "grande"))))
(if (eq ?ans 2) then (assert (valTamanho (new nrc.fuzzy.FuzzyValue ?*gVarTamanho* "medio"))))
(if (eq ?ans 3) then (assert (valTamanho (new nrc.fuzzy.FuzzyValue ?*gVarTamanho* "pequeno"))))
)
(deffunction mapaDescobertaTempo (?ans)
"Mapping Discovery Time to a Value"
(if (eq ?ans 1) then (assert (valDescoberta (new nrc.fuzzy.FuzzyValue ?*gVarDescobertaTempo* "novo"))))
(if (eq ?ans 2) then (assert (valDescoberta (new nrc.fuzzy.FuzzyValue ?*gVarDescobertaTempo* "antigo"))))
)
;----------------- Iniciando o módulo -----------------
(defmodule initialize)
(defrule initialize
(declare (salience 100))
=>
(load-package nrc.fuzzy.jess.FuzzyFunctions)
;Distância de Coruscant
(bind ?xPertoA (create$ 4.0 3500.0))
(bind ?yPertoA (create$ 1.0 0.0))
(?*gVarDistanciaDeCoruscant* addTerm "pertoA" ?xPertoA ?yPertoA 2)
(bind ?xlonge (create$ 3500.0 8000.0))
(bind ?ylonge (create$ 0.0 1.0))
(?*gVarDistanciaDeCoruscant* addTerm "longeA" ?xlonge ?ylonge 2)
(?*gVarDistanciaDeCoruscant* addTerm "muitoLonge" "muito longe")
;Temperatura
(bind ?xquente (create$ 500.0 2000.0))
(bind ?yquente (create$ 0.0 1.0))
(?*gVarTemperatura* addTerm "quente" ?xquente ?yquente 2)
(bind ?xfrio (create$ 50.0 500.0))
(bind ?yfrio (create$ 1.0 0.0))
(?*gVarTemperatura* addTerm "frio" ?xfrio ?yfrio 2)
(?*gVarTemperatura* addTerm "muitoQuente" "muito quente")
(?*gVarTemperatura* addTerm "muitoFrio" "muito frio")
(?*gVarTemperatura* addTerm "normamente" "não tão hot e (não frio)")
;Distância dos Planetas Vizinhos
(bind ?xPertoA (create$ 0.01 1500))
(bind ?yPertoA (create$ 1.0 0.0))
(?*gVarPlanetasVizinhos* addTerm "pertoA" ?xPertoA ?yPertoA 2)
(bind ?xlonge (create$ 1500 400000))
(bind ?ylonge (create$ 0.0 1.0))
(?*gVarPlanetasVizinhos* addTerm "longeA" ?xlonge ?ylonge 2)
(?*gVarPlanetasVizinhos* addTerm "muitoLonge" "muito longe")
;Tamanho do Planeta
(bind ?xGrande (create$ 2 500))
(bind ?yGrande (create$ 0.0 1.0))
(?*gVarTamanho* addTerm "grande" ?xTamanho ?yTamanho 2)
(bind ?xPequeno (create$ 0 2))
(bind ?yPequeno (create$ 1.0 0.0))
(?*gVarTamanho* addTerm "pequeno" ?xPequeno ?yPequeno 2)
(?*gVarTamanho* addTerm "medio" "normalmente como Coruscant")
;Descoberta Cronólgica
(bind ?xAntigo (create$ 50000BBY 0BBY))
(bind ?yAntigo (create$ 1.0 0.0))
(?*gVarDescobertaTempo* addTerm "antigo" ?xAntigo ?yAntigo 2)
(bind ?xNovo (create$ 0ABY 400ABY))
(bind ?yNovo (create$ 0.0 1.0))
(?*gVarDescobertaTempo* addTerm "novo" ?xNovo ?yNovo 2)
)
;-------------- Módulo de Perguntar --------------
(defmodule perguntar)
(deffunction perguntarUtilizador (?questao ?respostaTipo ?topico)
"Obtenha respostas de perguntas postas"
(bind ?resposta "")
(while (not (numberp ?resposta)) do
(printout t ?questao " ")
(bind ?questao (read)))
(if(eq ?topico distanciaDeCoruscant) then (mapaDistanciaCoruscant ?resposta))
(if(eq ?topico temperatura) then (mapTemperatura ?resposta))
(if(eq ?topico distanciaPlanetasVizinhos) then (mapdistanciaPlanetasVizinhos ?resposta))
(if(eq ?topico tamanho) then (mapaTamanho ?resposta))
(if(eq ?topico descoberta) then (mapaDescobertaTempo ?resposta))
(return ?resposta))
;Faça perguntas individuais com base no tópico
(defrule perguntar::perguntarQuestaoPorTopico
"Faça perguntas com base em tópicos e grandes respostas"
(declare (auto-focus TRUE))
(MAIN::questao (topico ?topico) (texto ?texto) (respostaTipo ?respostaTipo))
(not (MAIN::resposta (topico ?topico)))
?perguntar <- (MAIN::perguntar ?topico)
=>
(bind ?resposta (perguntarUtilizador ?texto ?respostaTipo ?topico))
(assert (resposta (topico ?topico) (texto ?resposta)))
)
;------------------ Módulo de boas-vindas que exibe a mensagem inicial ------------------
(defmodule bemvindo)
(defrule bemvindoMensagem
=>
(printout t "Bem-vindo, sou a Robô Jess, responsável pela astronomia da Região Desconhecida" crlf)
(printout t "Você precisa de minha ajuda para encontrar os planetas perdidos na Região Desconhecida" crlf)
(printout t "Bem, este sistema é exactamente para você." crlf)
(printout t "Fale-me o seu nome <Enter>: ")
(bind ?nome (read))
(printout t "Hello "?nome crlf)
(printout t "Responda as seguintes perguntas que nos ajudarão a entender quais são seus requisitos" crlf)
)
;Módulo de fetchRespostas Module obtém as respostas do utilizador
(defmodule fetchRespostas)
(defrule fetchdistanciaDeCoruscant
=>
(assert perguntar distanciaDeCoruscant))
)
(defrule fetchTemperatura
=>
(assert (perguntar temperatura))
)
(defrule fetchdistanciaPlanetasVizinhos
=>
(assert (perguntar distanciaPlanetasVizinhos))
)
(defrule fetchTamanho
=>
(assert (perguntar tamanho))
)
(defrule fetchDescoberta
=>
(assert (perguntar descoberta))
)
;----------------- Sugestões dos Planetas -----------------
(defmodule sugerir)
;Sugestão 1
(defrule Illum
(valdistanciaDeCoruscant ?dE&: (fuzzy-match ?dE "mais_ou_menos pertoA"))
(valTemperatura ?t&: (fuzzy-match ?t "mais_ou_menos muitoFrio"))
(valdistanciaPlanetasVizinhos ?dP&: (fuzzy-match ?dP "mais_ou_menos pertoA"))
(valTamanho ?vS&: (fuzzy-match ?vS "mais_ou_menos pequeno"))
(valDescoberta ?dT&: (fuzzy-match ?dT "velho"))
=>
(assert (MAIN::sugestoes
(planeta "Illum")
(descricao "Detalhes:
Distância de Coruscant: 3000 parsecs
Período orbital: 301 dias
Temperature: 228.15 K
Descoberto em: 18BBY")
(maisInfo "http://starwars.wikia.com/wiki/Ilum")))
)
;Sugestão 2
(defrule Csilla
(valdistanciaDeCoruscant ?dE&: (fuzzy-match ?dE "pertoA"))
(valTemperatura ?t&: (fuzzy-match ?t "muitoFrio"))
(valdistanciaPlanetasVizinhos ?dP&: (fuzzy-match ?dP "mais_ou_menos pertoA"))
(valTamanho ?vS&: (fuzzy-match ?vS "mais_ou_menos medio"))
(valDescoberta ?dT&: (fuzzy-match ?dT "velho"))
=>
(assert (MAIN::sugestoes
(planeta "Csilla")
(descricao "Detalhes :
Distância de Coruscant: 3000 parsecs
Período orbital: 462 Days
Temperature: 213.15 K
Descoberto em: 25000BBY")
(maisInfo "http://starwars.wikia.com/wiki/Csilla/Legends")))
)
;Sugestão 3
(defrule KlasseEphemora
(valdistanciaDeCoruscant ?dE&: (fuzzy-match ?dE "mais_ou_menos longeA"))
(valTemperatura ?t&: (fuzzy-match ?t "muitoFrio"))
(valdistanciaPlanetasVizinhos ?dP&: (fuzzy-match ?dP "mais_ou_menos pertoA"))
(valTamanho ?vS&: (fuzzy-match ?vS "muito grande"))
(valDescoberta ?dT&: (fuzzy-match ?dT "antigo"))
=>
(assert (MAIN::sugestoes
(planeta "Klasse Ephemora")
(descricao "Detalhes:
Distância de Coruscant: 3700 parsecs
Período orbital: 378 dias
Temperatura: 204.15 K
Descoberto em: 14500BBY")
(maisInfo "http://starwars.wikia.com/wiki/Klasse_Ephemora_A")))
)
;Sugestão 4
(defrule Mobus
(valdistanciaDeCoruscant ?dE&: (fuzzy-match ?dE "mais_ou_menos pertoA"))
(valTemperatura ?t&: (fuzzy-match ?t "mais_ou_menos frio"))
(valdistanciaPlanetasVizinhos ?dP&: (fuzzy-match ?dP "mais_ou_menos pertoA"))
(valTamanho ?vS&: (fuzzy-match ?vS "mais_ou_menos grande"))
(valDescoberta ?dT&: (fuzzy-match ?dT "antigo"))
=>
(assert (MAIN::sugestoes
(planeta "Mobus")
(descricao "Detalhes:
Distância de Coruscant: 2500 parsecs
Período Orbital: 1340 dias
Temperatura: 203 K
Descoberto em: 14000BBY")
(maisInfo "http://starwars.wikia.com/wiki/Mobus")))
)
;Sugestão 5
(defrule RakataPrime
(valdistanciaDeCoruscant ?dE&: (fuzzy-match ?dE "mais_ou_menos longeA"))
(valTemperatura ?t&: (fuzzy-match ?t "muitoQuente"))
(valdistanciaPlanetasVizinhos ?dP&: (fuzzy-match ?dP "mais_ou_menos muitoLonge"))
(valTamanho ?vS&: (fuzzy-match ?vS "mais_ou_menos medio"))
(valDescoberta ?dT&: (fuzzy-match ?dT "velho"))
=>
(assert (MAIN::sugestoes
(planeta "Rakata Prime")
(descricao "Detalhes:
Distância de Coruscant: 3900 parsecs
Período orbital: 278 dias
Temperatura: 318.15 K
Descoberto em: 35000BBY")
(maisInfo "http://starwars.wikia.com/wiki/Lehon")))
)
;Sugestão 6
(defrule Lwhekk
(valdistanciaDeCoruscant ?dE&: (fuzzy-match ?dE "mais_ou_menos muitoLonge"))
(valTemperatura ?t&: (fuzzy-match ?t "mais_ou_menos quente"))
(valdistanciaPlanetasVizinhos ?dP&: (fuzzy-match ?dP "mais_ou_menos muitoLonge"))
(valTamanho ?vS&: (fuzzy-match ?vS "mais_ou_menos pequeno"))
(valDescoberta ?dT&: (fuzzy-match ?dT "antigo"))
=>
(assert (MAIN::sugestoes
(planeta "Lwhekk")
(descricao "Detalhes:
Distância de Coruscant: 7200 parsecs
Período orbital: 344 dias
Temperatura: 329 K
Descoberto em: 2BBY")
(maisInfo "http://starwars.wikia.com/wiki/Lwhekk")))
)
;Sugestão 7
(defrule ZonamaSekot
(valdistanciaDeCoruscant ?dE&: (fuzzy-match ?dE "mais_ou_menos muitoLonge"))
(valTemperatura ?t&: (fuzzy-match ?t "normalmente"))
(valdistanciaPlanetasVizinhos ?dP&: (fuzzy-match ?dP "longeA"))
(valTamanho ?vS&: (fuzzy-match ?vS "mais_ou_menos medio"))
(valDescoberta ?dT&: (fuzzy-match ?dT "velho"))
=>
(assert (MAIN::sugestoes
(planeta "Zonama Sekot")
(descricao "Detalhes:
Distância de Coruscant: 5550 pasrecs
Período orbital: Variados
Temperatura: 294.15 K
Descoberto em: 89BBY")
(maisInfo "http://starwars.wikia.com/wiki/Zonama_Sekot")))
)
;Sugestão 8
(defrule Zakuul
(valdistanciaDeCoruscant ?dE&: (fuzzy-match ?dE "mais_ou_menos muitoLonge"))
(valTemperatura ?t&: (fuzzy-match ?t "frio"))
(valdistanciaPlanetasVizinhos ?dP&: (fuzzy-match ?dP "longe"))
(valTamanho ?vS&: (fuzzy-match ?vS "mais_ou_menos medio"))
(valDescoberta ?dT&: (fuzzy-match ?dT "velho"))
=>
(assert (MAIN::sugestoes
(planeta "Zakuul")
(descricao "Detalhes:
Distância de Coruscant: 7500 parsecs
Período orbital: 364 dias
Temperatura: 285.15 K
Descoberto em: 3600BBY")
(maisInfo "http://starwars.wikia.com/wiki/Zakuul")))
)
;Sugestão 9
(defrule Odessen
(valdistanciaDeCoruscant ?dE&: (fuzzy-match ?dE "mais_ou_menos muitoLonge"))
(valTemperatura ?t&: (fuzzy-match ?t "very hot"))
(valdistanciaPlanetasVizinhos ?dP&: (fuzzy-match ?dP "muito pertoA"))
(valTamanho ?vS&: (fuzzy-match ?vS "medio"))
(valDescoberta ?dT&: (fuzzy-match ?dT "velho"))
=>
(assert (MAIN::sugestoes
(planeta "Odessen")
(descricao "Detalhes:
Distância de Coruscant: 7800 parsecs
Período orbital: 356 dias
Temperatura: 290 K
Descoberto em: 3632BBY")
(maisInfo "http://starwars.wikia.com/wiki/Odessen")))
)
;Sugestão 10
(defrule Endelaan
(valdistanciaDeCoruscant ?dE&: (fuzzy-match ?dE "muito muitoLonge"))
(valTemperatura ?t&: (fuzzy-match ?t "muito muitoFrio"))
(valdistanciaPlanetasVizinhos ?dP&: (fuzzy-match ?dP "muito muitoLonge"))
(valTamanho ?vS&: (fuzzy-match ?vS "mais_ou_menos grande"))
(valDescoberta ?dT&: (fuzzy-match ?dT "antigo"))
=>
(assert (MAIN::sugestoes
(planeta "Endelaan")
(descricao "Detalhes:
Distância de Coruscant: 15000 parsecs
Período orbital: 368 dias
Temperatura: 150 K
Descoberto em: 45520BBY")
(maisInfo "http://starwars.wikia.com/wiki/Endelaan")))
)
;Sugestão 11
(defrule Altiria
(valdistanciaDeCoruscant ?dE&: (fuzzy-match ?dE "muitoLonge"))
(valTemperatura ?t&: (fuzzy-match ?t "muito quente"))
(valdistanciaPlanetasVizinhos ?dP&: (fuzzy-match ?dP "muito muitoLonge"))
(valTamanho ?vS&: (fuzzy-match ?vS "medio"))
(valDescoberta ?dT&: (fuzzy-match ?dT "antigo"))
=>
(assert (MAIN::sugestoes
(planet "Altiria")
(descricao "Detalhes:
Distância de Coruscant: 8400 pasecs
Período orbital: 338 dias
Temperatura: 321 K
Descoberto em: 6000BBY")
(maisInfo "http://starwars.wikia.com/wiki/Altiria/Anarris")))
)
;Sugestão 12
(defrule DingBriar
(valdistanciaDeCoruscant ?dE&: (fuzzy-match ?dE "muitoLonge"))
(valTemperatura ?t&: (fuzzy-match ?t "muito quente"))
(valdistanciaPlanetasVizinhos ?dP&: (fuzzy-match ?dP "muito pertoA"))
(valTamanho ?vS&: (fuzzy-match ?vS "muito grande"))
(valDescoberta ?dT&: (fuzzy-match ?dT "novo"))
=>
(assert (MAIN::sugestoes
(planeta "Ding Briar")
(descricao "Detalhes:
Distância de Coruscant: 4100 Ly
Período orbital: 2456 Days
Temperatura: 880 K
Descoberto em: 45ABY")
(maisInfo "http://starwars.wikia.com/wiki/Ding_Briar")))
)
;Sugestão 13
(defrule Durace
(valdistanciaDeCoruscant ?dE&: (fuzzy-match ?dE "longeA"))
(valTemperatura ?t&: (fuzzy-match ?t "frio"))
(valdistanciaPlanetasVizinhos ?dP&: (fuzzy-match ?dP "muitoLonge"))
(valTamanho ?vS&: (fuzzy-match ?vS "grande"))
(valDescoberta ?dT&: (fuzzy-match ?dT "velho"))
=>
(assert (MAIN::sugestoes
(planeta "Durace")
(descricao "Detalhes:
Distância de Coruscant: 3200 parsecs
Período orbital: 345 dias
Temperatura: 280 K
Descoberto em: 5000BBY")
(maisInfo "http://starwars.wikia.com/wiki/Durace")))
)
;Sugestão 14
(defrule Fern
(valdistanciaDeCoruscant ?dE&: (fuzzy-match ?dE "longeA"))
(valTemperatura ?t&: (fuzzy-match ?t "muitoFrio"))
(valdistanciaPlanetasVizinhos ?dP&: (fuzzy-match ?dP "pertoA"))
(valTamanho ?vS&: (fuzzy-match ?vS "grande"))
(valDescoberta ?dT&: (fuzzy-match ?dT "velho"))
=>
(assert (MAIN::sugestoes
(planeta "Fern")
(descricao "Detalhes:
Distância de Coruscant: 3100 parsecs
Período orbital: 335 dias
Temperatura: 175.45 K
Descoberto em: 13500BBY")
(maisInfo "http://starwars.wikia.com/wiki/Fern")))
)
;Sugestão 15
(defrule GerapsSule
(valdistanciaDeCoruscant ?dE&: (fuzzy-match ?dE "longeA"))
(valTemperatura ?t&: (fuzzy-match ?t "muitoFrio"))
(valdistanciaPlanetasVizinhos ?dP&: (fuzzy-match ?dP "pertoA"))
(valTamanho ?vS&: (fuzzy-match ?vS "grande"))
(valDescoberta ?dT&: (fuzzy-match ?dT "velho"))
=>
(assert (MAIN::sugestoes
(planeta "Geraps Sule")
(descricao "Detalhes:
Distância de Coruscant: 3152 parsecs
Período orbital: 2138 dias
Temperatura: 125.32 K
Descoberto em: 30000BBY")
(maisInfo "http://starwars.wikia.com/wiki/Geraps_Sule")))
)
;Sugestão 16
(defrule Giaca
(valdistanciaDeCoruscant ?dE&: (fuzzy-match ?dE "muitoLonge"))
(valTemperatura ?t&: (fuzzy-match ?t "normalmente"))
(valdistanciaPlanetasVizinhos ?dP&: (fuzzy-match ?dP "muitoLonge"))
(valTamanho ?vS&: (fuzzy-match ?vS "grande"))
(valDescoberta ?dT&: (fuzzy-match ?dT "novo"))
=>
(assert (MAIN::sugestoes
(planeta "Giaca")
(descricao "Detalhes:
Distância de Coruscant: 7230 parsecs
Período orbital: 414 dias
Temperatura: 296.6 K
Descoberto em: 830ABY")
(maisInfo "http://starwars.wikia.com/wiki/Giaca")))
)
;Sugestão 16
(defrule Irkalla
(valdistanciaDeCoruscant ?dE&: (fuzzy-match ?dE "muitoLonge"))
(valTemperatura ?t&: (fuzzy-match ?t "normalmente"))
(valdistanciaPlanetasVizinhos ?dP&: (fuzzy-match ?dP "muitoLonge"))
(valTamanho ?vS&: (fuzzy-match ?vS "medio"))
(valDescoberta ?dT&: (fuzzy-match ?dT "velho"))
=>
(assert (MAIN::sugestoes
(planeta "Irkalla")
(descricao "Detalhes:
Distância de Coruscant: 6330 parsecs
Período orbital: 410 dias
Temperatura: 293.3 K
Descoberto em: 25000BBY")
(maisInfo "http://starwars.wikia.com/wiki/Irkalla")))
)
;Sugestão 17
(defrule KroVar
(valdistanciaDeCoruscant ?dE&: (fuzzy-match ?dE "muitoLonge"))
(valTemperatura ?t&: (fuzzy-match ?t "normalmente"))
(valdistanciaPlanetasVizinhos ?dP&: (fuzzy-match ?dP "muitoLonge"))
(valTamanho ?vS&: (fuzzy-match ?vS "medio"))
(valDescoberta ?dT&: (fuzzy-match ?dT "velho"))
=>
(assert (MAIN::sugestoes
(planeta "Kro Var")
(descricao "Detalhes:
Distância de Coruscant: 11500 parsecs
Período orbital: 312 dias
Temperatura: 273.3 K
Descoberto em: 28BBY")
(maisInfo "http://starwars.wikia.com/wiki/Kro_Var")))
)
;Sugestão 18
(defrule Qoribu
(valdistanciaDeCoruscant ?dE&: (fuzzy-match ?dE "muitoLonge"))
(valTemperatura ?t&: (fuzzy-match ?t "muitoFrio"))
(valdistanciaPlanetasVizinhos ?dP&: (fuzzy-match ?dP "mais_ou_menos pertoA"))
(valTamanho ?vS&: (fuzzy-match ?vS "grande"))
(valDescoberta ?dT&: (fuzzy-match ?dT "novo"))
=>
(assert (MAIN::sugestoes
(planeta "Qoribu")
(descricao "Detalhes:
Distância de Coruscant: 12500 parsecs
Período orbital: 1312 dias
Temperatura: 153.7 K
Descoberto em: 0ABY")
(maisInfo "http://starwars.wikia.com/wiki/Qoribu")))
)
;Sugestão 19
(defrule Quethold
(valdistanciaDeCoruscant ?dE&: (fuzzy-match ?dE "muitoLonge"))
(valTemperatura ?t&: (fuzzy-match ?t "frio"))
(valdistanciaPlanetasVizinhos ?dP&: (fuzzy-match ?dP ""mais_ou_menos pertoA"))
(valTamanho ?vS&: (fuzzy-match ?vS "grande"))
(valDescoberta ?dT&: (fuzzy-match ?dT "novo"))
=>
(assert (MAIN::sugestoes
(planeta "Quethold")
(descricao "Detalhes:
Distância de Coruscant: 13300 parsecs
Período orbital: 334 dias
Temperatura: 193.7 K
Descoberto em: 0ABY")
(maisInfo "http://starwars.wikia.com/wiki/Quethold")))
)
;--------------- Resumindo todos os resultados ---------------
(defmodule report)
(defquery getResultados
(MAIN::sugestoes
(planeta ?planeta)
(descricao ?descricao)
(maisInfo ?maisInfo))
)
;--------------- Exibindo todos os resultados ---------------
(defrule getTodosResultados
=>
(bind ?resultado (run-query* getResultados))
(bind ?i 0)
(printout t crlf "--------- Estes planetas correspondem aos seus critérios --------"crlf)
(while (?resultado next) do
(printout t crlf)
(printout t "Nome do planeta: " (?resultado getString planeta) crlf)
(printout t "Descrição do planeta: " (?resultado getString descricao) crlf)
(printout t "Mais informação: " (?resultado getString maisInfo) crlf)
(++ ?i))
(if (eq ?i 0) then
(printout t "Opa, não encontro nenhum planeta que corresponda às suas necessidades, no meu banco de dados." crlf))
)
;Iniciando a aplicação
(reset)
(focus initialize bemvindo fetchRespostas sugerir report)
(run)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment