- 전체
- JAVA 일반
- JAVA 수학
- JAVA 그래픽
- JAVA 자료구조
- JAVA 인공지능
- JAVA 인터넷
- Java Framework
- Java GUI (AWT,SWING,SWT,JFACE)
- SWT and RCP (web RAP/RWT)[eclipse], EMF
JAVA 인공지능 Jess 간단한 문법 요약
2019.12.22 17:05
Jess 간단한 문법 요약
Jes s 다운로드
Jess의 라이센스 버전을 다음 사이트에서 다운받을 수 있다. http://www.manning.com/friedman-hill 또는 http://herzberg.ca.sandia.gov/jess
Jess의 설치
Jess를 설치하고 실행하기 위해서는 먼저 J2SE가 설치되어야 한다. 버전은 1.2이상이면 된다.
다운받은 압축파일을 적당한 위치에 풀고 내컴퓨터의 환경변수의 CLASSPATH에 jess.jar를 추가시킨다.
Jess의 실행
다음과 같이 Jess를 실행시킬 수 있다.
D:\Jess 61p7>java -classpath .;jess.jar jess.Main Jess, the Java Expert System Shell
Copyright (C) 2003 E.J. Friedman Hill and the Sandia Corporation Jess Version 6.1 4/9/2003
Jess>
Jes s P r ogr a m 실행
Command prompt 상에서 간단히 Jess program을 실행할 수 있다. Jess> (printout t "Hello, World!" crlf)
Hello, World!
Jess>
또한 스크립트 형태의 간단한 *.clp 파일을 작성하여 Jess 기동과 동시에 실행할 수도 있다. C:\Jess 61> java jess.Main hello.clp
Hello, World!
C:\Jess 61>
Jes s La ngua ge의 기초
기본적으로 Jess에서는 newline과 whitespace는 무시(단, 인용부호 내의 코드는 제외)되므로 코드 작성시 구분이 용 이하게 작성하면 된다.
Jess Symbol은 영문자, 숫자와 몇가지 특수문자($, *, ., =, +, /, <, >, _, ?,
#)로 구성이 되며 숫자로 시작되지 않는다. 또한 $, =, ?와 같은 특수문자로 시작되어서는 안된다.
Symbol ‘nil’은 자바에서 ‘null’과 같다. ‘nil’은 반드시 소문자이어야 한다. 반대로 ‘TRUE’, ‘FALSE’ 같은 Symbol은 반드 시 대문자이어야 한다.
Jess의 모든 Value들은 클래스 ‘jess.Value’의 인스턴스이다. 이들은 한번 생성되면 변하지 않는다. ‘jess.Value’객체 는 그 자신이 가지고 있는 자료의 타입을 알고 있고 이것은 그 자신의 type()메소드를 통해 가능하다. ‘jess.RU’ 클래스 는 이들 타입에 대한 상수들을 가지고 있다.
Number Type은 3가지가 있다. RU.INTEGER, RU.FLOAT, RU.LONG이 그것이다.
String은 인용부호로 감싸며 자바에서와 같이 인용부호 자체(“)는 ‘\”’로 표현한다. 또한 ‘\n’은 줄바꿈 기호이다. String type도 마찬가지로 ‘jess.Value’ 객체로 표현될 수 있으며 그 타입은 ‘RU.STRING’이다.
Jess에서 주석기호는 세미콜론(;)이다.
Jes s 의 간단한 문법
Jess에서 가장 기초가 되는 구조는 list이다. 다음은 Jess에서 사용하는 list의 예를 보여준다. (+ 3 2)
(a b c)
("Hello, World") ()
(1 2 3)
(deftemplate foo (slot bar))
list의 첫번째 요소는 head라고 하며 head로 인하여 list가 고유한 특성을 지니게 된다. 각각의 list는 괄호(‘(’, ‘)’)로 구 분이 되어진다. 일부 사람들은 괄호 사용을 자바와 같이 쓰게 되는데 이는 잘못된 것이다.
(bind ?x (+
(* 20 3
)
(- 37 23
)
)
)
Jess Language의 특성상 Readablity를 증가시키기 위해서는 다음 예와 같이 작성해야 한다. (bind ?x (+
(* 20 3)
(- 37 23)))
함수호출
Jess prompt상에서 간단히 함수를 호출할 수 있다. Jess> (+ 2 2)
4
Jess 함수는 이와 같이 선행표기법을 쓴다. 다음과 같이 Jess함수는 함수 내에 포함되어 호출된 수도 있다. Jess> (+ (+ 2 3) (* 3 3))
14
가장 많이쓰는 함수는 printout 함수이다. 이 함수는 text를 표준출력 또는 file로 저장한다. Jess> (printout t "The answer is " 42 "!" crlf)
The answer is 42!
여기서 ‘t’는 콘솔창에 출력하라는 의미이고 ‘crlf’는 새로운 행을 출력하라는 뜻이다.
또 다른 유용한 함수는 ‘batch’이다. 이 함수는 ‘clp’확장자를 가진 file을 읽어들여 실행하는 함수이다. Jess> (batch examples/hello.clp)
Hello, World!
Java에서 long형의 값을 Jess로 넣기 어렵다. 이때 쓰는 함수가 ‘long’함수이다. long형 값을 넣기 위해서는 다음과 같 이 String을 사용한다.
(bind ?aLongValue (long "123456789"))
변수
Jess에서의 변수는 Java와 비슷하다. 그러나 type이 지정되어 있지 않다. 이것은 Jess 변수 자체에서 어떤형태로이든 지 data type을 가지고 있기 때문이다. Jess 변수는 signle symbol, number, string, list 등을 참조할 수 있다. Jess 변 수는 ‘?’로 시작된다.
변수를 따로 선언할 필요는 없다. 변수에 값을 할당하기 위해서는 bind함수를 쓰면 된다. Jess> (bind ?x "The value")
"The value"
그리고 변수의 값을 보기 위해서는 변수명을 타이핑하기만 하면 된다. Jess> (bind ?a (+ 2 2))
4
Jess> ?a
4
전역변수
Jess에서는 ‘reset’이라는 아주 중요한 명령어가 있는데 reset을 하게되면 Jess의 ‘working memory’가 초기화된다. 즉 일반변수인 경우 reset에 의해서 사라지게 된다. 그러나 전역변수는 reset에 의해서도 사라지지 않는다. 전역변수는 다음과 같이 ‘*’문자로 표현될 수 있다.
?*a* ?*all-values* ?*counter*
그리고 전역변수는 ‘defgrobal’함수에 의해서 선언된다. 다음 예제가 도움이 될 것이다. Jess> (defglobal ?*x* = 3)
TRUE
Jess> ?*x*
3
Jess> (bind ?*x* 4)
4
Jess> ?*x*
4
Jess> (reset) ;; Jess will reset ?*x* to its initial value of 3 TRUE
Jess> ?*x*
3
Jess> (bind ?*x* 4)
4
Jess> (set-reset-globals nil)
FALSE
Jess> (reset) ;; This time, ?*x* will not be changed.
TRUE
Jess> ?*x*
4
[출처] asiadream | 구영탄 http://blog.naver.com/asiadream/6620163
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.