CLIPS>(+ 2.0 2.0) ; Á½¸ö¸¡µã²ÎÊýµÄÔËËã½á¹û»¹ÊǸ¡µãÐÍ 4.0
CLIPS>(+ 2 2.0) ; »ìºÏÐͲÎÊýÊä³ö¸¡µãÐͽá¹û 4.0
×¢Òâ×îºóÒ»¸öÇéÐÎÊÇ»ìºÏµÄ²ÎÊý£¬CLIPS×Ô¶¯½«½á¹ûת±äΪ˫¾«¶È¸¡µãÐÍ¡£
Äã¿ÉÒÔÏÔʽµÄת±ä½á¹ûµÄÀàÐÍ£¬Í¨¹ýʹÓÃfloatºÍintegerÔËËã·û£¬ÈçÏÂËùʾ£º
CLIPS>(float (+ 2 2)) ; ÏÔʽת»»ÕûÐ͵½¸¡µãÐÍ 4.0
CLIPS>(integer (+ 2.0 2.0)) ; ÏÔʽת»»¸¡µãµ½ÕûÐÍ 4
Ô²À¨ºÅÓÃÀ´Ö¸¶¨±í´ïʽµÄÔËËã˳Ðò¡£ÔÚ?x+?y*?zµÄÀý×ÓÖУ¬Í¨³£µÄ¼ÆËã˳ÐòÊÇÏȼÆËã?y*?z£¬È»ºóÔÙÓë?xÏà¼Ó¡£È»¶ø£¬ÔÚCLIPSÖУ¬Èç¹ûÄãÏë°´ÕÕ´Ë˳Ðò¼ÆËãµÄ»°£¬ÄÇô±ØÐëÏÔʽµÄʹÓÃÔ²À¨ºÅ£¬ÈçÏ£º
(defrule mixed-cals
(numbers ?x ?y ?z) =>
(assert (answer (+ ?x (* ?y ?z)))))
ÔÚÕâÌõ¹æÔòÖУ¬×îÄÚÒ»²ãµÄÔ²À¨ºÅÀïµÄÔËËã×îÏÈÖ´ÐУ¬ËùÒÔÏÈÖ´ÐÐ?y*?z£¬È»ºóÔÙÓë?xÏà¼Ó¡£
Ô¼Êø±äÁ¿
ÓÉģʽƥÅäÔÚLHSÖзÖÅäÒ»¸öÖµ¸ø±äÁ¿ÀàËÆÓÚͨ¹ý°ó¶¨º¯Êý(bind function)ÔÚRHSÖаó¶¨(binding)Ò»¸öÖµµ½±äÁ¿¡£Èç¹ûͬһ¸ö±äÁ¿±»Öظ´µÄʹÓõ½£¬ÄÇôÔÚRHSÖÐ°ó¶¨Æä±äÁ¿Öµ½«·Ç³£·½±ã¡£
ÒÔÒ»¸ö¼òµ¥µÄÊýѧ¼ÆËãΪÀý£¬ÈÃÎÒÃÇÊ×ÏȽ«´ð°¸°ó¶¨µ½Ò»¸ö±äÁ¿£¬²¢Ëæºó´òÓ¡Ô¼Êø±äÁ¿(bound variable)¡£
CLIPS>(clear)
CLIPS>(defrule addition
(numbers ?x ?y) =>
(assert (answer (+ ?x ?y))) (bind ?answer (+ ?x ?y))
(printout t ¡°answer is ¡±?answer crlf)) CLIPS>
(assert (numbers 2 2))
f-0 (initial-fact) f-1 (numbers 2 2) f-2 (answer 4)
For a total of 3 facts. CLIPS>
(bind)ͬÑù¿ÉÒÔ±»ÓÃÔÚRHSÖУ¬ÓÃÀ´°ó¶¨µ¥»ò¶à×Ö¶ÎÖµµ½Ò»¸ö±äÁ¿¡£(bind)±»ÓÃÀ´°ó¶¨Áã¸ö£¬Ò»¸ö»ò¶à¸öÖµµ½Ò»¸ö±äÁ¿£¬¶ø²»´ø¡°$¡±ÔËËã·û¡£µ÷ÓÃLHSÖеıäÁ¿£¬Äã¿ÉÒÔÔÚÒ»¸ö×Ö¶ÎÖУ¬Ê¹Óá°$¡±ÔËËã·û´´½¨¶à×Ö¶Îģʽ£¬Èç¡°$?x¡±¡£È»¶ø£¬ÔÚRHSÖУ¬¡°$¡±ÔËËã·ûÊDz»ÐèÒªµÄ£¬ÒòΪ(bind)µÄ²ÎÊýÏÔʽµÄ¸æÖªÁËCLIPSËü°ó¶¨ÖµµÄ¸öÊý¡£ÊÂʵÉÏ£¬¡°$¡±ÔËËã·ûÔÚRHSÖÐÖ»ÊÇÒ»¸öÎÞÓõĸ½ÊôÎï¡£
ÏÂÃæµÄÀý×Ó¸ø³öµÄÊÇÔÚRHSÖа󶨶à¸ö±äÁ¿¡£¶à×Ö¶ÎÖµº¯Êý(multifield value function)£¬create$±»ÓÃÀ´´´½¨Ò»¸ö¶à×Ö¶ÎÖµ¡£ËüµÄ»ù±¾Óï·¨ÈçÏÂËùʾ£º
(create$
ÕâÀÈÎÒâ¸öÊýµÄ²ÎÊý¶¼¿ÉÒÔ±»×÷Ϊ´´½¨¶à×Ö¶ÎÖµ¸½ÊôÔÚÒ»Æð¡£ÕâЩ¶à×Ö¶ÎÖµ£¬»òµ¥×Ö¶ÎÖµ£¬¿ÉÒÔ±»Ô¼Êøµ½RHSÐÐΪÖеÄÒ»¸ö±äÁ¿£¬ÈçÏÂËùʾ£º
CLIPS>(clear)
CLIPS>(defrule bind-values-demo =>
(bind ?duck-bachelors (create$ Dopey Dorky Dinky)) (bind ?happy-bachelor-mv (create$ Dopey)) (bind ?none (create$)) (printout t
¡°duck-bachelors¡± ?duck-bachelors crlf
¡°duck-bachelors-no-()¡± (implode$ ?duck-bachelor) crlf ¡°happy-bachelor-mv ¡±?happy-bachelor-mv crlf ¡°none¡± ?none crlf))
CLIPS>(reset) CLIPS>(run)
duck-bachelors (Dopey Dorky Dinky) duck-bachelors-no-() Dopey Dorky Dinky happy-bachelor-mv (Dopey) none () CLIPS>
×Ô¶¨Ò庯Êý
ÏñÆäËûÓïÑÔÒ»Ñù£¬CLIPSÔÊÐí³ÌÐòԱͨ¹ýdeffunctionÀ´¶¨Òå×Ô¼ºµÄº¯Êý¡£ÖÚËùÖÜÖª£¬deffuntion¿ÉÒÔ°ïÖúÄã½ÚÊ¡ÖØ¸´ÊäÈëÏàͬµÄÐÐΪ(actions)¡£
×Ô¶¨Ò庯Êý(deffunction)ÔÚÌá¸ß³ÌÐòµÄ¿É¶ÁÐÔÉÏÒ²ÊǷdz£ÓÐÓõģ¬Äã¿ÉÒÔÏñµ÷ÓÃÆäËûº¯ÊýÒ»Ñùµ÷ÓÃ×Ô¶¨Ò庯Êý£¬×Ô¶¨Ò庯ÊýÒ²¿ÉÒÔ±»ÓÃÀ´µ±×÷ÆäËûº¯ÊýµÄ²ÎÊýʹÓá£ÔÚ×Ô¶¨Ò庯ÊýÖУ¬(printout)¿ÉÒÔÔÚÈκÎλÖÃʹÓã¬ÉõÖÁ²»ÊÇ×÷Ϊ×îºóÒ»¸öÐÐΪ£¬ÒòΪ´òÓ¡µÄÒ»¸ö¸±×÷ÓÃÊǵ÷ÓÃÁË(printout)º¯Êý¡£
×Ô¶¨Ò庯ÊýµÄͨÓÃÓï·¨ÈçÏÂËùʾ£º
(deffunction
(?arg1 ?arg2 ? ?argM [$?argN]) ; ²ÎÊý±í£¬×îºóÒ»¸öΪ¿ÉÑ¡¶à×ֶβÎÊý (
ÆäÖУ¬?argΪÐéÄâ²ÎÊý(dummy arguments)£¬´ú±í²ÎÊýµÄÃû×Ö£¬Èç¹ûÔÚÒ»Ìõ¹æÔòÖвÎÊýÃûÏàͬ£¬±äÁ¿²»»á·¢Éú³åÍ»¡£ÐéÄâ±äÁ¿ÔÚÆäËûÊé±¾ÖУ¬Í¨³£±»³ÆÖ®Îª²ÎÁ¿(parameter)¡£
¾¡¹Üÿ¸öÐÐΪ¶¼¿ÉÒÔ´Óº¯ÊýÖзµ»ØÖµ£¬ÕâЩ¶¼±»×Ô¶¨Ò庯Êý·µ»Ø¸øÓû§¡£×Ô¶¨Ò庯Êý½ö½ö·µ»Ø×îºóÒ»¸öÐÐΪ£¬¸ÃÐÐΪ¿ÉÄÜÊǸöº¯Êý£¬Ò»¸ö±äÁ¿»òÒ»¸ö³£Á¿¡£
ÏÂÃæµÄÀý×ÓÊÇÒ»¸öÓÃÀ´¼ÆËãÈý½ÇÐÎб±ßµÄ×Ô¶¨Ò庯Êý£¬È»ºó±»ÓÃÔÚ¹æÔòÖС£¼´Ê¹¹æÔòÖÐ×÷ΪÐéÄâ²ÎÊýµÄ±äÁ¿Ãû¶¼ÊÇÒ»ÑùµÄ£¬Ò²²»»áÓгåÍ»£¬ÕâÊÇÒòΪËüÃǶ¼ÊÇÐéÄâµÄ£¬²¢²»Ö¸´úÈκβÎÊý¡£
CLIPS>(clear)
CLIPS>(deffunction hypotenuse ; º¯ÊýÃû
(?a ?b) ; ÐéÄâ²ÎÊý (sqrt(+ (* ?a ?a)(* ?b ?b)))) ; ÐÐΪ CLIPS>(defrule calculate-hypotenuse
(dimensions ?base ?height) =>
(printout t ¡°Hypotenuse=¡± (hypotenuse ?base ?height) crlf)) CLIPS>(assert (dimensions 3 4))
×Ô¶¨Ò庯ÊýҲͨ³£±»ÓÃÔÚ¶à×Ö¶ÎÖµÖУ¬ÈçÏÂÀý×ÓËùʾ£º
CLIPS>(clear)
CLIPS>(deffunction count ($?arg)
(length $?arg))
CLIPS>(count 1 2 3 a duck ¡°quacks¡±) 6
CLIPS>
ÆäËûÌØÐÔ
ÆäËûһЩÓÐÓõĺ¯ÊýÈçÏÂËùʾ¡£¸ü¶àµÄÐÅÏ¢£¬Çë²Î¿´CLIPS²Î¿¼Ö¸ÄÏ¡£ º¯Êý º¬Òå round ËÄÉáÎåÈë integer È¡Õû format ¸ñʽÊä³ö list-deffunctions º¯ÊýÁбí ppdeffuntion ´òÓ¡³öº¯Êý undeffunction ɾ³ýº¯Êý
length ×ֶεij¤¶È£¬»ò×Ö·û´®ÖÐ×ÖĸµÄ¸öÊý nth$ Ö¸¶¨´æÔÚµÄ×ֶΣ¬·ñÔòΪnil
member$ Èç¹û±äÁ¿´æÔÚ£¬Ôò·µ»Ø×ֶεijÉÔ±£¬·ñÔòΪFALSE
subsetp Èç¹ûÒ»¸ö¶à×Ö¶ÎÖµÊÇÁíÒ»¶à×Ö¶ÎÖµµÄÒ»²¿·ÖÔò·µ»ØTRUE£¬·ñÔò·µ»Ø
FALSE
delete$ ɾ³ý¸ø³öÊý×Ö×Ö¶ÎÄÚµÄÖµ
explode$ ½«¶à×Ö¶ÎÖµÒÔÿ¸ö×Ö·û´®ÔªËØ·µ»Ø
subseq$ ·µ»Ø×ֶεÄÖ¸¶¨·¶Î§ replace$ Ìæ´úÖ¸¶¨µÄÖµ
µÚÆßÕ ³ÌÐòµÄ¿ØÖÆ
µ±ÄãÄêÇáµÄʱºò£¬Äã±»ÊÀ½çËù¿ØÖÆ£¬µ±ÄãÀϵÄʱºò£¬Ä㽫¿ØÖÆÊÀ½ç¡£
µ½Ä¿Ç°ÎªÖ¹£¬ÄãÒѾѧÀúÁËCLIPSµÄ»ù±¾¾ä·¨¡£ÏÖÔÚ£¬Ä㽫ѧϰÔõÑù½«ËùѧµÄ¾ä·¨Ó¦Óõ½Êµ¼ÊÓÐÓõijÌÐòµ±ÖÐÈ¥¡£Í¬Ê±£¬Ä㻹½«»áѧµ½Ò»Ð©¹ØÓÚÊäÈëµÄеľ䷨£¬ÔõÑù±È½Ï±äÁ¿ºÍ²úÉúÑ»·¡£
¶ÁÈ뺯Êý
³ýÁËģʽƥÅäÍ⣬¹æÔò»¹¿ÉÒÔͨ¹ýÆäËû·½Ê½»ñÈ¡ÐÅÏ¢¡£CLIPS¿ÉÒÔͨ¹ýʹÓöÁÈ뺯Êý(read function)À´¶ÁÈëÓû§ÊäÈëµÄ¼üÅÌÐÅÏ¢¡£
ÏÂÃæÊÇʹÓÃ(read)ÃüÁîÀ´ÊäÈëÊý¾ÝµÄÀý×Ó¡£×¢Òâ(read)ÃüÁîÔÚеÄÒ»ÐÐÖвåÈë¹â±êºó²¢²»ÐèÒª¶àÓàµÄ(crlf)¡£(read)×Ô¶¯½«¹â±êÖØÖõ½ÐµÄÒ»ÐÐÖС£
CLIPS>(clear)
CLIPS>(defrule read-input =>
(printout t ¡°Name a primary color¡± crlf) (assert (color (read)))) CLIPS>
(defrule check-input
?color <- (color ?color-read&red|yellow|blue) =>
(retract ?color)
(printout t ¡°Correct¡± crlf)) CLIPS>(reset) CLIPS>(agenda) 0 read-input:*
For a total of 1 activation. CLIPS>(run)
Name a primary color green
CLIPS> ; ûÓдòÓ¡³ö¡°correct¡±
ÉÏÃæµÄ¹æÔòÖУ¬ÔÚRHSÖÐʹÓüüÅÌÊäÈ룬²»ÓÃÖ¸¶¨ÈÎÒâLHSÖеÄģʽ¾Í¿ÉÒԷdz£·½±ãµÄ±»´¥·¢£¬ÇÒµ±(reset)³öÏÖºó×Ô¶¯µÄ±»¼¤»î¡£µ±ÊäÈë(agenda)ÃüÁîºó£¬¶ÁÈë¹æÔòµÄ¼¤»î½«±»ÏÔʾ£¬´òÓ¡Ò»¸ö*ºÅ£¬¶ø²»ÊÇÏñÊÂʵ±êʶ·û£¬Èçf-1¡£*ºÅµÄʹÓÃÓÃÀ´±íʾ¸Ãģʽ²»ÓÃÖ¸¶¨ÊÂʵ£¬¾ù¿ÉÂú×ã¡£
(read)º¯Êý²¢²»ÊÇ¿ÉÒÔ¶ÁÈëËùÓмüÅÌÊäÈëµÄͨÓú¯Êý£¬Ëü½öÄܶÁÈëÒ»¸ö×ֶΡ£ËùÒÔ£¬µ±ÄãÏë¶ÁÈëÏÂÃæµÄ£º
primary color is red
ÄÇô£¬Ö»ÓеÚÒ»¸ö×ֶΡ°primary¡±Äܱ»¶ÁÈë¡£Èç¹ûÄãÏë¶ÁÈëËùÓеÄ×ֶΣ¬ÄÇô±ØÐëʹÓÃË«ÒýºÅ½«Æä°üº¬ÆðÀ´¡£µ±È»£¬Ò»µ©Ê¹ÓÃÁËË«ÒýºÅ£¬ÄÇô¾Í»á±»µ±×÷Ò»¸öµ¥×Ö·û´®¡£È»ºó¿ÉÒÔͨ¹ýstr-explode»òsub-string function·ÃÎÊ×Ó×Ö·û´®£¬Èç¡°primary¡±£¬¡°color¡±£¬¡°is¡±ºÍ¡°and¡±¡£
(read)µÄµÚ¶þ¸öÏÞÖÆÊDz»ÄÜÊäÈëÔ²À¨ºÅ£¬³ý·ÇʹÓÃË«ÒýºÅ¡£¾ÍÏñ²»ÄÜÉùÃ÷Ò»¸ö°üº¬Ô²À¨ºÅµÄÊÂʵһÑù£¬Ò²²»ÄÜʹÓÃ(read)Ö±½Ó¶ÁÈëÔ²À¨ºÅ¡£