Jess 7.2p2——Java平台规则引擎官方文档翻译2
来源:互联网 发布:黑客数据交易平台 编辑:程序博客网 时间:2024/05/18 01:10
Jess 7.2p2——Java平台规则引擎官方文档翻译2
本博客是本人接着[本体小本营][1]之前关于Jess的官方文档的补充翻译,前一部分请看转载的Jess 7.2p2——Java平台规则引擎官方文档翻译1。因为对JESS理解有限,如有失误,敬请留言。
4.定义函数
4.1.Deffunctions
你能定义自己的函数,用deffunction结构,deffunction的结构如下所示:
(deffunction <function-name> [<doc-comment>] (<parameter>*) <expr>* [<return-specifier>])
必须是符号。每个必须是变量名。可选的是一个双引号字符串,可以描述函数的用途。可能有任意数量表达式。可选的给出的函数的返回值。它可以是返回函数的显式使用,也可以是任意值或表达式。在deffunctions的控制流是通过控制流函数如foreach实现的,如果,虽然。以下例子是deffunction实现返回它的两个数值中较大的一个:
Jess> (deffunction max (?a ?b) (if (> ?a ?b) then (return ?a) else (return ?b)))TRUE
注意以上函数也可以同时写成如下形式:
Jess> (deffunction max (?a ?b) (if (> ?a ?b) then ?a else ?b))TRUE
这个功能现在可以被任何一个Jess函数调用来使用。例如:
Jess> (printout t "The greater of 3 and 5 is " (max 3 5) "." crlf)The greater of 3 and 5 is 5.
通常一个deffunction包含特定的参数数目。写一个deffunction,其中包含任意数量的参数,使最后的形式参数是一个多变量的前缀——“$”字符。当deffunction被调用,多变量将包含所有剩余的参数作为一个列表传递给函数。一个deffunction可以接受不超过一个通配符,通配符必须在函数的最后一个参数。
您还可以用java编写的函数自定义Jess语言。这些与内置函数没有什么区别,事实上,您使用定义内置函数的统一口来编写它们。详情见这里。
4.2. Defadvice
有时一个Jess函数不会表现得完全像你希望的那样。defadvice结构让你写一些Jess代码,这些代码将在每一次Jess函数被调用的之前或者之后运行。defadvice可以让你轻松地“包装”额外的代码在任何Jess的功能,例如它执行在(因此可以改变被真正的函数看到的参数列表,或者通过返回其自身价值来达到其完全的短路)之前或执行在真正的函数之后(因此可以看到真正的函数的返回值并可能改变它。)defadvice 提供了一个好的方式对于那些Jess附件内容作者,它扩展了Jess而不需要改变任何内部代码。
这是一些例子展示了defadvice如何使用。
这个拦截调用’plus’ (+) 并且增加了另外的参数 ‘1’, 因此 (+ 2 2) 变成了 (+ 2 2 1) -> 5. 变量 ‘$?argv’ 是特殊指定的. 它通常是指真正的Jess函数被调用时将收到的参数列表。
Jess> (defadvice before + (bind $?argv (create$ $?argv 1)))TRUEJess> (+ 2 2)5
这个例子使得所有的加法等于1(即所谓的短路)。defadvice通过返回值,使得函数每次被调用时都保持真正的函数功能。
Jess> (defadvice before + (return 1))TRUEJess> (+ 2 2)1
这个例子从+函数的返回值中减去1,?retval是另一个有意思的变量——它是真正函数的返回值。当我们完成后,我们利用undefadvice移除advice。
Jess> (defadvice after + (return (- ?retval 1)))TRUEJess> (+ 2 2)3Jess> (undefadvice +)Jess> (+ 2 2)4
- Jess 7.2p2——Java平台规则引擎官方文档翻译2
- Jess 7.2p2——Java平台规则引擎官方文档翻译1
- Jess 7.0p1——Java平台规则引擎(一)
- Jess 7.0p1——Java平台规则引擎(一)
- Bullet physics 引擎的官方文档翻译
- Bullet physics 引擎的官方文档翻译
- P2物理引擎中文文档
- 苹果官方文档翻译——前言
- Impala——官方文档翻译
- unity官方文档翻译——Android
- Kafka官方文档翻译——简介
- Kotlin官方文档翻译—概述
- jess学习笔记之三:java中嵌入jess引擎
- JS物理引擎p2.js中文文档
- Ilog、Drools、Jess规则引擎的Rule Language 比对
- Ilog、Drools、Jess规则引擎的Rule Language 比对
- Ilog、Drools、Jess规则引擎的Rule Language 对比
- Ilog、Drools、Jess规则引擎的Rule Language 对比
- MapReduce相关参数
- 方格填数
- debian_sudo
- Javascript中的with关键字
- [SpringMVC]自定义注解实现控制器访问次数限制
- Jess 7.2p2——Java平台规则引擎官方文档翻译2
- oVirt 技巧汇总
- 安装git
- HashMap源码剖析
- 欢迎使用CSDN-markdown编辑器
- How does deep residual learning work?
- python重温设计模式===>行为型
- spring学习(一)— spring 概念
- 关于Navicat和MYSQL字符集不统一出现的中文乱码问题