Дипломы, курсовые, рефераты, контрольные...
Срочная помощь в учёбе

Некоторые расширения. 
Интеллектуальные системы и технологии

РефератПомощь в написанииУзнать стоимостьмоей работы

После команды (reset) здесь будут две глобальные переменные, ?*varl* и ?*oranges*, со значениями 17 and «seven» соответственно, которые могут быть доступны любому правилу. Для изменения этих значений может быть использована функция bind. Кратко описанная ранее концепция wildcards используется для сопоставления паттернов. Для этого используется символ? в левой части правила. Предположим, имеются… Читать ещё >

Некоторые расширения. Интеллектуальные системы и технологии (реферат, курсовая, диплом, контрольная)

Кратко описанная ранее концепция wildcards используется для сопоставления паттернов. Для этого используется символ? в левой части правила. Предположим, имеются факты о членах трех известных музыкальных групп:

  • (member-of beatles john_lennon paul_mccartney george_harrison ringo_starr)
  • (member-of who roger_daltrey pete_townsend keith_moon) (member-of ebtg tracey_thorn ben_watt)

Если необходимо записать правило, которое будет запускаться всеми этими фактами, невозможно использовать ?, поскольку он будет сопоставлять только один символ. Однако можно использовать концепцию множественного wildcards, обозначаемую $?, который будет сопоставлять ноль или более символов, например:

  • (defrule bands
  • (member-of ?band $?)

=>

(printout t «there is a band called » ?band crlf)).

При этом имеют место следующие результаты:

CLIPS>(run).

there is a band called ebtg there is a band called beatles there is a band called who.

Далее можно получить список всех членов всех групп:

  • (defrule band-members
  • (member-of ?band $? ?member $?)

=>

(printout t? member «is a member of » ?band crlf)).

Возможен также множественный wildcard переменных:

  • (defrule band-members
  • (member-of ?band $?members)

=>

(printout t «The members of » ?band «are «$?members crlf)).

Ранее было показано, как ввести переменные в паттерны левой части правила. Используя функцию bind, возможно также создать переменную в правой части правила:

  • (defrule addup (number ?х)
  • (number ?у)

=>

  • (bind ?total (+ ?x ?y))
  • (printout t? x «+ » ?y «= «?total crlf)
  • (assert (total ?total)))

Определенная таким образом переменная для правой части правила существует только внутри этого правила. Если необходимо использовать такие переменные более чем в одном правиле, можно использовать конструкт defglobal, как в следующем примере:

  • (defglobal
  • ?*varl* = 17 ?*oranges* = «seven»

После команды (reset) здесь будут две глобальные переменные, ?*varl* и ?*oranges*, со значениями 17 and «seven» соответственно, которые могут быть доступны любому правилу. Для изменения этих значений может быть использована функция bind.

Показать весь текст
Заполнить форму текущей работой