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