例子

  1. 执行流程
  2. rule1
  3. subState=##chenshun00
  4. rule2
  5. 如果 (height 不等于 None 并且 weight 不等于 None ) 进入执行 { f44=searchFromDb({height},{weight}) }
  6. 否则 如果 (height 等于 None 或者 weight 等于 None ) 进入执行 { chen=fw 并且 shun=真fw }
  7. rule3
  8. 如果 (f44 不等于 None) 进入执行 { chen={f44.chen} 并且 shun={f44.shun} 并且 sizez={f44.sizez} 并且 fzz={f44.fzz} }
  9. rule4
  10. 如果 (chen 不等于 None 并且 shun 不等于 None ) 进入执行 { a_u=true }
  1. <domain>
  2. <!-- 自定义函数 -->
  3. <function name="your_function_name">opendial.domains.Test$FuckFunction</function>
  4. <function name="searchFromDb">opendial.domains.Test$SearchFromDb</function>
  5. <!-- 第一个模型 -->
  6. <model trigger="chenshun00">
  7. <!-- 没有条件 100$执行effect块 -->
  8. <rule>
  9. <case>
  10. <!--
  11. 等价于 var subState = "##chenshun00";
  12. var #chenshun00 = 111;
  13. var ##chenshun00 = 111;
  14. -->
  15. <effect>
  16. <set var="subState" value="##chenshun00"/>
  17. <set var="#chenshun00" value="111"/>
  18. <set var="##chenshun00" value="111"/>
  19. </effect>
  20. </case>
  21. </rule>
  22. <!-- 存在condition,需要根据上下文进行判定,如果 height!=None && weight != None
  23. 执行searchFromDb({height},{weight}),参数从上下文中获取。
  24. -->
  25. <rule>
  26. <case>
  27. <condition operator="and">
  28. <if var="height" value="None" relation="!="/>
  29. <if var="weight" value="None" relation="!="/>
  30. </condition>
  31. <effect prob="1">
  32. <set var="f44" value="searchFromDb({height},{weight})"/>
  33. </effect>
  34. </case>
  35. <!-- 如果上边那个case没有命中,那么继续判定下边的case是否能命中。如果命中就执行effect,否则跳过 -->
  36. <case>
  37. <condition operator="or">
  38. <if var="height" relation="=" value="None"/>
  39. <if var="weight" relation="=" value="None"/>
  40. </condition>
  41. <effect prob="1">
  42. <set var="chen" value="fw"/>
  43. <set var="shun" value="真fw"/>
  44. </effect>
  45. </case>
  46. </rule>
  47. <!-- 如果f44 != None ,执行effect中的变量赋值 -->
  48. <rule>
  49. <case>
  50. <condition>
  51. <if var="f44" relation="!=" value="None"/>
  52. </condition>
  53. <effect>
  54. <set var="chen" value="{f44.chen}"/>
  55. <set var="shun" value="{f44.shun}"/>
  56. <set var="sizez" value="{f44.sizez}"/>
  57. <set var="fzz" value="{f44.fzz}"/>
  58. </effect>
  59. </case>
  60. </rule>
  61. <rule>
  62. <case>
  63. <condition operator="and">
  64. <if var="chen" relation="!=" value="None"/>
  65. <if var="shun" relation="!=" value="None"/>
  66. </condition>
  67. <effect>
  68. <set var="a_u" value="true"/>
  69. </effect>
  70. </case>
  71. </rule>
  72. </model>
  73. <!-- 由于上边流程流转引发了a_u的变更,因此继续执行trigger=a_u的model,设置u_m变量,不能继续乡下跑了,执行结束 -->
  74. <model trigger="a_u">
  75. <rule>
  76. <case>
  77. <effect prob="1">
  78. <set var="u_m" value="我输出一下这个变量吧 {chen} {shun}"/>
  79. </effect>
  80. </case>
  81. </rule>
  82. </model>
  83. </domain>

截图

image.png