Джесс вопросы о мультислоте

Это домашнее задание, но мне очень трудно найти хорошую информацию о jess в Интернете. Я пытаюсь использовать мультислот для решения проблемы, но не могу найти ничего о том, как сопоставить разные значения. У меня есть это:

(deftemplate patient (slot name)(multislot symptoms))

(deffacts init 
(patient (name john) (symptoms very-high-fever cough)))

Как я могу сопоставить левую часть только с очень высокой температурой? Это работает, если я знаю, что очень высокая температура является первым симптомом, но я не могу быть в этом уверен, поэтому мне нужно иметь возможность сопоставить, является ли очень высокая температура одним из симптомов.

(defrule high-fever
(patient (name ?n)(symptoms very-high-fever ?))
=>
(printout t ?n " has a high fever." crlf))

Я пробовал различные комбинации ограничений поля, но, похоже, не могу понять это правильно, и ничто в Интернете не дает мне никаких подсказок.

Спасибо.


person coffeeNjava    schedule 27.09.2013    source источник


Ответы (1)


Используйте пустое мультиполе до и после элемента, который вы хотите сопоставить; они соответствуют нулю или более элементам. Итак, что-то вроде

(patient (name ?n) (symptoms $? very-high-fever $?))

Подойдет любому пациенту с симптомом очень высокой температуры в любом положении.

person Ernest Friedman-Hill    schedule 27.09.2013