。공부 。2008.07.08 18:09
제스에서 사용자함수를 만들기 위해서 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:마우스

신고
Posted by kyoe
。공부 。2008.07.08 17:15
1. if함수
(bind ?num 100)
(if (> ?num 95)then
   (printout t"A+" crlf)
   else
   (printout t"A+이 아닙니다." crlf)
   )
위의 소스는 ?num이 95보다 크면 A+을 출력하라는 간단한 if함수의 예제 입니다.
선행표기법을 제외하면 일반 if문과 같다는것을 알수있습니다.

2. member$
(bind ?com-list (create$ 모니터 본체 스피커))
(if (member$ 본체 ?com-list)then
    (printout t"본체가 있습니다." crlf)
    else
    (printout t"본체가 없습니다." crlf)  
    )
일반리스트를 활용한 if함수 예제 입니다. 여기서 눈여겨 봐야 할 함수가 member$
member$는 member$ 바로 앞의 원소가 해당리스트에 존재하면 TRUE를 리턴하게 되고
존재하지 않을시에는 FALSE를 리턴하게 됩니다.

[실행결과]
A+
본체가 있습니다.
신고
Posted by kyoe
TAG If, jess, 제스
。공부 。2008.07.08 16:43
C나 자바에서와 같이 제스 에서는 반복문이 존재 한다.
foreach나 for문 while와 같은 함수가 말이죠.

1. foreach 함수는 일반리스트의 원소를 차례차례 한개씩 받아오는 함수이다.
(bind ?com-list (create$ 모니터 본체 스피커))
(bind ?num 0)
(foreach ?data-list ?com-list
    (printout t (++ ?num)" : " ?data-list crlf)
    )
foreach 함수는 위와 같이 쓰인다.
첫번째줄에서 일반리스트를 선언해준뒤 두번째줄에서 카운터변수 ?num을 0으로 초기화 시켜주고 있다.
foreach 함수의  첫번째 변수인 ?data-list는 ?com-list의 원소값 한개를 받아와 저장하게 된다.
com-list의 원소가 nil이 아닐 동안 원소를 한개씩 받아오게 되는것이다.

[실행 결과 ]
1 : 모니터
2 : 본체
3 : 스피커

2. for 함수
(for (bind ?i 0) (<= ?i 9) (++ ?i)
    (printout t"3 *" ?i " = " (* 3 ?i) crlf)
    )
for문의 형식은 씨언어나 자바와 비슷하다 다만 제스는
선형표기법을 쓴다 라는것을 빼면 말이죠
위의 소스는 간단하게 구구단 3단을 출력하는 소스입니다.

3. while 함수
(bind ?num 1)
(while (<= ?num 9) do
    (printout t "2 * " ?num " = "(* 2 ?num) crlf)
    (++ ?num)
    )
역시 형식은 자바와 비슷하죠?
while의 조건이 만족하는 동안 do 아래의 문장을 실행하게 됩니다.
[실행결과]
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18

신고
Posted by kyoe
。공부 。2008.07.08 16:24
jess 에서는 C나 자바에서와 비슷한 의미로 리스트라는걸 쓰더군요 아직 배우는수준이라 정확히 이녀석을 어디에 어떻게 쓰는지는 자세히는 모르지만 문법정도는 설명할수 있을거 같네요

1. 변수를 선언하듯 리스트를 선언해 줍니다.
(bind ?com-list (create$ 모니터 본체 스피커))
create$ 라는 것이 보이죠? 이는 제스에서 일반 리스트를 생성할때 첫번째원소는 함수로 인식하기 때문에 (예를 들어 (+ 2 2) 에서 +를 함수로 인식하는것과 마찬가지) 이를 해결하기 위해 create$를 사용합니다.
함수앞에 '$' 가 붙으면 일반리스트를 제어하는 함수라 생각하면 쉽다.
이렇게 되면 ?com-list 의 첫번째원소는 모니터 두번째는 본체 그리고 세번째는 스피커되 되는것이죠

2. 리스트의 헤드와 꼬리 부분 출력
(printout t"첫번째 원소 : " (first$ ?com-list) crlf)
(printout t"나머지 원소 : " (rest$ ?com-list) crlf)
첫번째 원소(헤드)를 받아오는 특수함수 first$  
첫번째 원소를 제외한 나머지 원소(꼬리)를  받아오는 rest$
위와 같이 first$ 와 rest$라는 특수 함수를이용해 헤드와 꼬리부분을 받아올수 있습니다.

3. 리스트의 특정원소 받아오기
(printout t"특정위치의 원소 : " (nth$ 2 ?com-list) crlf)
특정위치의 원소를 받아오는 nth$ 함수를 사용해서 원하는 원소의 값을 받아올수 있다.

4. 일반리스트 데이터 추가
(bind ?addcom-list (create$ ?com-list 키보드 마우스))
addcom-list 를 선언한뒤 데이터를 할당하는데 이때 전에 선언해둔 ?com-list를 사용해서 데이터를 추가 할수 도 있다.

(printout t"addcom-list : " ?addcom-list)
위의 addcom-list 를 출력하면 다음과 같다.
addcom-list : (모니터 본체 스피커 키보드 마우스)
신고
Posted by kyoe

티스토리 툴바