18. 조건에 따라 다른 기능 실행하기 4 - (if) 중첩
목표
(if)
함수 안에 또 다른 (if)
함수를 넣어서, 좀 더 복잡한 조건문을 만들어봅시다.
알아본 것들
앞에서 조건문
과 관련하여 우리가 알아본 것들은 다음과 같습니다.
(if)
함수를 이용하면,조건
에 따라서 다른 기능을 수행하게 만들 수 있습니다.(=)
나(>=)
와 같은비교함수
를 사용하면, 원하는조건
을 만들 수 있습니다.(and)
나(or)
와 같은논리함수
를 사용하면, 여러조건
들로부터 원하는조건
을 만들 수 있습니다.
이번에는 우리가 위에서 알아본 것들을 바탕으로, (if)
함수를 중첩해봅시다.
활용
(if)
문을 중첩하여, 조건에 따라 다음과 같은 기능을 하도록 만들어 봅시다.
- 사용자가 “y”를 입력하면 선객체생성, 아니라면 문자객체를 생성
- 사용자가 선객체 생성을 선택했는데, 클릭 한 두 점의 길이가 10 미만이면 “선 길이가 너무 짧습니다”를 명령어창에 보여주고, 10이상이면 실제 선을 생성
- 사용자가 문자객체 생성을 선택했는데, 문자의 높이가 5 미만이면 “문자가 너무 작습니다”를 명령어창에 보여주고, 5이상이면 실제 문자객체를 생성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
(progn
(setq makeLine (getstring "\n선객체 생성(y), 문자객체 생성(스페이스바)")) ;1
(if (= makeLine "y") ;2
(progn ;3
(setq point1 (getpoint "\n선의 시작점 클릭"))
(setq point2 (getpoint "\n선의 끝점 클릭"))
(setq dist (distance point1 point2)) ;4
(if (>= dist 10) ;5
(command "line" point1 point2 "")
(princ "\n선 길이가 너무 짧습니다")
)
)
(progn ;6
(setq point (getpoint "\n문자 삽입점 클릭"))
(setq height (getdist point "\n문자 높이 입력"));7
(if (>= height 5) ;8
(command "text" point height 0)
(princ "\n문자가 너무 작습니다")
)
)
)
(princ)
)
- 사용자로부터
y
또는 다른값을 입력받아서makeLine
에 저장합니다makeLine
이y
인지 확인합니다makeLine
이y
인 경우(progn)
으로 묶인 함수들을 실행합니다.(if)
함수는참인경우실행
과거짓인경우실행
인자에서 1개의 함수만 실행가능하기 때문에, 여기서(progn)
함수로 여러 함수들을 묶어줍니다.(distance)
함수는 두 점 사이의 거리를 반환 해 주는 함수입니다. 여기서 사용자가 클릭 한 두 점의 거리가dist
변수에 저장됩니다.dist
의 값이 10 이상일경우(command)
함수로 선을 생성하고, 10미만인 경우에는 메시지를 띄웁니다.makeLine
이y
가 아닌경우(progn)
으로 묶인 함수들을 실행합니다.(progn)
을 사용한 이유는 위의3.
과 같습니다.(getdist)
함수에point
(삽입점)을 넣어서, 사용자가 거리를 직접 입력하거나, 또는 삽입점으로부터 다른 점을 클릭하여 거리를 계산할 수 있도록 했습니다.(getdist)
로 반환된 거리는height
변수에 저장됩니다.height
의 값이 5 이상일경우(command)
함수로 문자를 생성하고, 5미만인 경우에는 메시지를 띄웁니다.