제스에서 사용자함수를 만들기 위해서 deffunction문을 앞에 써준뒤 함수명을 기능에 맞게 부여한뒤 사용하면 되는데 이역시 사용하는 방식을 일반함수와 비슷합니다.
2. 큰수를 구하는 함수
(deffunction test_fct(?x ?y) (if(> ?x ?y)then (return ?x) else (return ?y) ) ) (printout t"MAX : " (test_fct 100 200) crlf) 어떤가요 함수 선언시 앞에 deffunction문이 붙는거이외에는 일반 저희가 선언할때랑 비슷하죠? 다만 제스에서는 return이 생략되도 ?x 값이나 ?y값을 리턴할수 있습니다. (if(> ?x ?y)then ?x else ?y ) 이런식으로 생략되도 ?x 와 ?y값은 리턴됩니다.
3. 리스트를 이용한 함수, multifield 변수
(deffunction show-list(?data1 ?data2 $?datas) (bind ?list-num 0) (bind ?com-list(create$ ?data1 ?data2 ?datas)) (foreach ?com-data ?com-list (printout t " "(++ ?list-num) ":" ?com-data) ) (printout t crlf) )
(show-list 모니터) ; 에러발생 (show-list 모니터 본체) (show-list 모니터 본체 스피커) (show-list 모니터 본체 스피커 키보드 마우스) show-list 함수를 선언한뒤 매개변수로 3개의 값을 받고 있네요 여기서 눈여겨 봐야 할 부분은 $?datas 이부분입니다. 매개변수 앞에 '$'가 붙으면 multifield 변수로써 쓰여지게 됩니다. 여기셔 multifield변수란 위의 show-list 함수에서 3개의 매개변수를 받을수 있게끔되어 있지만 multifield변수를 사용하면 3개이상의 매개변수를 받을수 있게 되는것입니다. 또한 함수호출시 2개의 매개변수만 넘겨주게 되면 multifield변수인 $?datas는 아무값도 없는값이 되므로 2개의 매개변수만 넘겨주어도 에러가 나지 않지만 여기서 한개의 매개변수만 넘겨주게 되면 ?data2변수에 값이 지정되지 않았으므로 에러가 발생한다.
[실행결과]
Jess reported an error in routine show-list while executing deffunction show-list while executing (show-list 모니터). Message: Too few arguments to deffunction show-list. Program text: ( show-list 모니터 ) at line 10.
1:모니터 2:본체 1:모니터 2:본체 3:스피커 1:모니터 2:본체 3:스피커 4:키보드 5:마우스 |