Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;;;========================================================
- ;;; Илия Попов ИСТ-2 ФК202514******
- ;;; Контролно; условие: Да се напише експертна система,
- ;;; коятo определя какво ще е времето.
- ;;; Като може да се въвежда времето от конзолата.
- ;;; Предложеното решение е подходящо за времева прогноза
- ;;;========================================================
- ;;****************
- ;;* DEFFUNCTIONS *
- ;;****************
- (deffunction hardware(?model ?serial)
- return ""
- )
- (deffunction sensors-connection(?hardware)
- (if (neq ?hardware "") then
- ;(printout t "Hardware found! " crlf)
- return "Hardware found!"
- else
- ;(printout t "No hardware found! " crlf)
- return "No hardware found!"
- )
- )
- (deffunction min-temp(?value)
- return ?value
- )
- (deffunction max-temp(?value)
- return ?value
- )
- (deffunction humidity(?value)
- return ?value
- )
- (deffunction sensors-read-data()
- (if (eq sensors-connection TRUE) then
- ; TO DO return temp and humidity
- else
- return "NO DATA"
- )
- )
- (deffunction ask-user()
- (printout t "Какво е времето? ")
- (bind ?enter (read))
- (if (neq ?enter "")then
- (bind ?enter (lowcase ?enter))
- )
- return ?enter
- )
- ;;****************
- ;;* deftemplate *
- ;;****************
- (deftemplate hardware-sensor "Знания относно хардуерния сензор"
- (slot sensor-info)
- (slot status)
- (multislot data);temp and humidity
- )
- (assert (hardware-sensor(sensor-info (hardware "" ""))(status (sensors-connection (hardware "" "")))))
- (deftemplate user-answer "Знания за времето веведени от потребител"
- (slot answer)
- )
- (deftemplate weather-conditions "Знания относно времевите състояния"
- (slot sunny)
- (slot cold)
- (slot wet)
- (slot foggy)
- (slot frozen)
- )
- (assert (weather-conditions (sunny слънчево)
- (cold студено)
- (wet дъждовно)
- (foggy мъгливо)
- (frozen замръзнало)))
- (deftemplate weather-forecast "Крайна прогноза за времето"
- (slot season (default ""))
- (slot conditions (default ""))
- (slot min-temp (default 0))
- (slot max-temp (default 1))
- (slot humidity (default 2)); влажност
- (multislot information)
- )
- ;;****************
- ;;* defrule *
- ;;****************
- (defrule read-value
- (hardware-sensor(status ?s&"Hardware found!"|"No hardware found!"))
- =>
- (if (= ?s "Hardware found!")
- then
- (assert (hardware-sensor(data (sensors-read-data))))
- else
- (printout t "Статус на хардуерното устройство за метерологични данни: " ?s crlf)
- (printout t "Тъй като устройството не e налично ще питам Вас " crlf)
- (assert (user-answer (answer (ask-user))))
- )
- )
- (defrule weather-is-sunny
- (user-answer (answer ?a))(weather-conditions (sunny ?s))
- (test (= ?a ?s))
- =>
- (assert (weather-forecast (information Времето е топло и ?s)))
- )
- (defrule weather-is-cold
- (user-answer (answer ?a))(weather-conditions (cold ?c))
- (test (= ?a ?c))
- =>
- (assert (weather-forecast(information Времето е ?c и може да вали сняг)))
- )
- (defrule weather-is-wet
- (user-answer (answer ?a))(weather-conditions (wet ?w))
- (test (= ?a ?w))
- =>
- (assert (weather-forecast (information Времето е ?w и може да вали)))
- )
- (defrule weather-is-foggy
- (user-answer (answer ?a))(weather-conditions (foggy ?f))
- (test (= ?a ?f))
- =>
- (printout t ?a ?f)
- (assert (weather-forecast (information Времето е ?f и може да вали дъжд или сняг)))
- )
- (defrule weather-is-frozen
- (user-answer (answer ?a))(weather-conditions (frozen ?f))
- (test (= ?a ?f))
- =>
- (assert (weather-forecast (information Времето е много студено и навън всичко е ?f)))
- )
- (defrule ready-answer
- (weather-forecast(information $?i))
- =>
- (printout t $?i)
- )
- (run)
- (facts)
Advertisement
Add Comment
Please, Sign In to add comment