Въвеждане (четене) на данни в clips



Дата13.09.2016
Размер37.24 Kb.
ВЪВЕЖДАНЕ (ЧЕТЕНЕ) НА ДАННИ В CLIPS

За четене на данни, които се въвеждат от клавиатурата, най-често се използва функцията read. В процеса на изпълнението й интерпретаторът спира работата си и изчаква потребителя да въведе атомарна стойност (стойност, съставена от едно поле), след което автоматично курсорът преминава на нов ред.

Пример:

> (clear)

> (defrule read-input

(initial-fact)

=>

(printout t "Name a primary colour" crlf)

(assert (colour (read))))

> (defrule check-input

?colour <- (colour ?colour-read&red|blue|yellow)

=>

(retract ?colour)

(printout t "Correct" crlf))

> (reset)

> (run)

Name a primary colour

red

Correct

> (reset)

> (run)

Name a primary colour

green

> ; не се извежда "Correct"

Функцията read не може да бъде използвана като достатъчно общо средство за въвеждане на данни от клавиатурата. Едно от ограниченията, които read налага, е свързано с това, че тя предизвиква прочитането само на едно поле. За тази функция всички знакове, които се съдържат в даден низ (които са заградени в двойни кавички), образуват стойност, съставена от едно поле. За да бъде прочетено всичко, което потребителят иска да въведе, трябва текстът да бъде заграден в двойни кавички. След това с помощта на функции от типа на str-explode и sub-string може да се осъществи достъп до отделните поднизове. Друго ограничение, породено от read, е свързано с невъзможността да се въвеждат скоби, освен ако не са заградени в двойни кавички.

За четене на стойности, съставени от няколко полета, може да се използва функцията readline. Тази функция предизвиква прочитане на целия текст, въведен от потребителя, до срещане на CR (символ за край на ред). Тази функция чете въведените от потребителя данни като низ. За записване в работната памет на съответния факт, прочетен с помощта на readline, може да се използва функцията assert-string.

Пример:


> (clear)

> (assert-string "(primary colour is red)")



> (facts)

f-0 (primary colour is red)

For a total of 1 fact.

>

Ще отбележим, че аргументът на assert-string трябва да бъде низ. Следващият пример показва как може да се запише в работната памет факт, съставен от няколко полета, прочетен с помощта на readline.



> (clear)

> (defrule test-readline

(initial-fact)

=>

(printout t "Enter input" crlf)

(bind ?string (readline))

(assert-string (str-cat "(" ?string ")")))

> (reset)

> (run)

Enter input

primary colour is red

> (facts)

f-0 (initial-fact)

f-1 (primary colour is red)

For a total of 2 facts.

>


ИЗВЕЖДАНЕ (ОТПЕЧАТВАНЕ) НА ТЕКСТОВЕ

Извеждането на текстове (данни) се извършва с помощта на командата printout, която има има следния синтаксис:



(printout *)

Тук трябва да е t, ако извеждането ще се извършва на стандартното изходно устройство (терминала). Сред поредицата изрази * може да се срещат символите crlf (който предизвиква преминаване на нов ред), tab (табулация), ff (form feed).




СВЪРЗВАНЕ НА ПРОМЕНЛИВА

Свързването на дадена променлива със стойността на определен израз става с помощта на командата bind, която има следния синтаксис:



(bind )

В резултат на изпълнението на командата bind посочената променлива се свързва със стойността на дадения израз. Така освен в резултат на успешно съпоставяне променливите в CLIPS могат да се свързват с (нови) стойности с помощта на командата bind.

За свързване на променлива с адрес (на факт или обект, т.е. екземпляр на клас) се използва командата <-.

ГЕНЕРИРАНЕ НА СИМВОЛИ

Извършва се с помощта на функциите gensym и gensym*. Оценките на обръщенията към тези функции изглеждат както следва:



(gensym) --> символ от вида genX, където X е цяло число без знак (при всяко следващо обръщение към функцията се генерира нов символ от посочения вид);

(gensym*) –-> символ от вида genX, където X е уникално за текущото състояние на системата цяло число бeз знак.

Механизъм на използване на gensym:



(setgen 1)

(gensym) --> gen1

(gensym) --> gen2

. . .


База данных защищена авторским правом ©obuch.info 2016
отнасят до администрацията

    Начална страница