CLIPS-焦点

一、完成从MAIN->NO1->NO2模块变化

CLIPS> (clear)
CLIPS> (defmodule MAIN
(export deftemplate initial-fact))
CLIPS> (defmodule NO1
(import MAIN deftemplate initial-fact))
CLIPS> (defrule MAIN::START
=>(focus NO1))
CLIPS> (defrule NO1::next
=>
(printout t "begin no1" crlf)
(focus NO2)
(return)
(printout t "end no1" crlf))

CLIPS> (defmodule NO2)
CLIPS> (get-current-module)
NO2
CLIPS> (defrule NO2:next2
=>
(printout t "begin no2 " crlf)
(pop-focus)
(printout t "end no2" crlf)
)
CLIPS> (watch rules)
CLIPS> (watch focus)
CLIPS> (reset)
<== Focus MAIN
==> Focus MAIN
CLIPS> (run)
FIRE    1 START:*
==> Focus NO1 from MAIN
FIRE    2 next:*
begin no1
==> Focus NO2 from NO1
<== Focus NO1
FIRE    3NO2:next2: *
begin no2
<== Focus NO2 to MAIN
end no2
<== Focus MAIN
CLIPS>

二、当前焦点是称为焦点栈的堆栈数据结构的顶点值,用focus改变当前焦点,实际上就是交新的焦点移到焦点栈的顶部,取代原焦点,随着规则的执行,当前焦点的议程为空时,当前焦点将从焦点栈中弹出,同时此时位于栈顶的另一模块成为当前焦点,该焦点的议程被执行。

1、(get-current-module)得到当前模块

2、(list-focus-stack)列出模块堆栈

3、(defmodule NO2)定义模块

4、(pop-focus)为从栈中弹出当前焦点模块,但允许规则的RHS操作继续执行,因为end no2被打印出。

5、(return)为从栈中弹出当前焦点模块并返回,所以规则的RHS操作不会继续执行,end no1没有打印出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值