java代码降低噪声 java减少运行时间( 五 )


3.Jess 语言基础
大多数时间你是在使用Jess语言编写Jess规则 。如果你从来没有使用过Lisp,第一次使用Jess规则语言也许看起来就有点奇怪了 , 但它并不需要太长时间来学习 。回报也是丰厚的,你将使用非常少的代码表达复杂的逻辑关系 。
在这一章,我们将看到Jess语言的基础语法 。在后面的章节中,我们再来学习怎样定义像事实与规则这样的高级概念,但现在我们将学习最基础的 。
在本语言指导中,我将使用一个非正规的符号来描述语法 。在 中的基本串是必须提供的数据类型 , 在方括号中([])的内容是可选的,以 + 结束表示可以出现一次或多次,以 * 结束表示可以出现零次或更多 。一般来说, Jess的输入格式是自由的 。换行不具有特殊的含义,仅被处理为空格,而异常将被标识 。
3.1.符号
符号是Jess语言的一个核心概念 。符号是非常类似于其他语言中的标识符 。Jess符号包括字母,数字和下面的标点符号:$*=+/_?#. 。一个符号不能以数字开始 , 可以以一些特殊的标点符号开始(这些字符作为操作员当出现在符号开始时有着特殊的意义)
Jess符号对于大小写敏感 。foo,FOO , 和Foo是不同的符号 。
最佳的符号是由字母,数字,下划线和破折号组成 。破折号是传统的分隔符 。如下所示为合法的符号:
foo first-value contestant#1 _abc
Jess中有三种特殊的符号 。零,和java中的空值有点类似;真和假是Jess中的布尔类型的值 。
3.2.数字
Jess分别使用Java函数parseInt(java.lang.String), parseLong(java.lang.String)和parseDouble(java.lang.String)来解析整型,长整型和浮点型数字 。参考本文档中关于这些方法精确的语法描述 。如下为合法的数字:
3 4. 5.643 5654L 6.0E4 1D
3.3.字符串
Jess中的字符串是用双引呈来标识的("). 。反斜线能够区分嵌入的引号 。注意Jess的字符串和Java的字符串在一些重要的地方是不一样的 。首先,不会认识转义序列 。比如说你不能用一个"\n"字符串来换行 。另一方面 , 真正的换行可以通过双引号中的字符串来实现 。他们是字符串的一部分 。如下为合法的字符串:
"foo" "Hello, World" "\"Nonsense,\" he said firmly." "Hello,
There"
最后一个字符串相当于Java中的字符串"Hello,\nThere". 。
3.4.列表
Jess中的另一个基础语法元素是列表 。列表是由圆括号和空,符号,数字,字符串和其他列表组成 。如下所示为合法的列表:
(+ 3 2) (a b c) ("Hello, World") () (deftemplate foo (slot bar))
Jess中列表的第一个元素(Lisp中称为列表的car)通常被称列表的头 。
3.5.注释
Jess支持两种类型的程序注释 。Lisp风格的行注释和C风格的块注释 。行注释是以分号开头,延伸到文本中本行的最后 。这里有一个行注释的例子:
; This is a list
(a b c)
块注释就和他们在C语言中的用法一样:他们以两个特征符"/*"开始,以"*/"结束 。块注释不能嵌套 。
/*
Here is an example of a list (commented out):
(a b c)
*/
注释可以在Jess程序的任何地方出现 , 包括模板和规则的结构里 。
3.6.函数调用
和Lisp一样 , Jess中的所有代码(控制结构 , 分配,程序调用)都是以函数调用的方式进行的 。没有操作器,一切都是函数调用 。然而,有些函数的名字使它们看起来像是Java操作器,在这种情况下,它们就和它们的Java 副本工作的非常相似 。
Jess中的函数调用可以理解为简单的列表 。函数调用采用前缀表示,如果一个列表的头部是一个已经存在的函数的符号,那么它就可以称为是一个函数调用 。举例来说,用+函数来算2和3相加的表达式应该写为(+ 2 3) 。在计算时,这个表达式的结果是数字5(不是一个仅包含数字5的列表?。?。通常来说,在合适的时候表达式都被看作是这样并通过上下文求值 。你可以在Jess提示符后键入表达式 。Jess计算表达式并打印出结果:

推荐阅读