java代码自动修复 java自动补齐( 六 )


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计算表达式并打印出结果:
Jess (+ 2 3)
5
Jess (+ (+ 2 3) (* 3 3))
14
注意你可以嵌套调用函数;外部函数是形成内部函数调用计算的因素 。
Jess自身带有大量的内置函数 , 它们可以用来做一切事情 , 如数学计算 , 程序控制和字符处理,让你能够使用Java的API函数 。当然你也可以在Jess语言或者是Java语言中定义自己的函数 。
其中一个最经常用的函数是printout,它是用来发送文本到Jess的标准输出窗口,或者是输出到一个文件中 。完善的解释你必须等待,但是现在 , 你所要了解的都包含在下面这个例子中:
Jess (printout t "The answer is " 42 "!" crlf)
The answer is 42!
另一个常用的函数是batch , 它是用来计算一个包含Jess代码文件的 。要运行Jess源文件examples/jess/hello.clp,你可以键入:
ess (batch "examples/jess/hello.clp")
Hello, world!
Jess自带的其他的所有函数的详细说明都在Jess function guide. 。
3.7.变量
Jess中程序变量是以问号开始的标识符 。问号也是变量名的一部分 。名字可以包括字母 , 数字,破折号,下划线,分号和星号的任何组合 。
一个变量可以看作是一个简单的符号,数字,字符串或者是一个列表 。你可以用bind函数来为变量指定一个值 。
Jess (bind ?x "The value")
"The value"
变量在第一次使用前不需要声明(全局变量除外) 。
想在Jess提示符后看到变量 的值,你只需要键入变量的名字:
Jess (bind ?a 123)
123
Jess ?a
123
3.7.1.全局变量(默认全局)
你在Jess提示符后或者任何Jess语言程序顶层创建的所有变量 ,  当重置命令运行的时候都将被清除 。这样就使它们稍嫌短暂 , 对于暂时性变量它们很好用 , 在标准理解的前提下不是永久全局变量 。要创建不被reset销毁的全局变量,你可以用全局结构:
(defglobal [?global-name = value]+)

推荐阅读