포스트(post)

17. 조건에 따라 다른 기능 실행하기 3 - (if)중첩

목표

논리함수(or) (and) (not)을 사용하여 원하는 조건을 만들어봅시다.



논리함수

(if)함수에 조건은 한 가지만 추가할 수 있습니다.

1
(if 조건 참일때실행 [거짓일때실행])

만약 조건이 한가지가 아니라 여러가지라면 (and)함수 또는 (or)함수를 사용할 수 있습니다. 또는 특정조건에 해당하지 않을 경우에만 참일때실행이 실행되게 하고 싶다면, (not)을 사용하면 됩니다.

모든 조건을 만족하면 참 (and)

(and) 안에는 원하는 만큼 조건을 추가할 수 있습니다. 만약 (and)함수 안의 모든 인자들이 인조건이면(nil이 아니면) (and)함수는 T(참, true)를 반환합니다. 하지만 (and)함수 내에 한가지라도 이 아닌 조건이 있다면 nil을 반환합니다.

1
2
(and T T T T) ;T
(and T T nil T) ;nil

한 가지 조건이라도 만족하면 참 : (or)

(or) 안에도 원하는 만큼 조건을 추가할 수 있습니다. 만약 (or)함수 안의 인자들 중 한개 이상이 인조건이면 (or)함수는 T(참, true)를 반환합니다. (or)함수의 모든 인자가 거짓인 조건일 경우에 nil을 반환합니다.

1
2
(or T nil nil nil) ;T
(or nil nil nil nil) ;nil

조건에 해당하는 경우는 거짓 : (not)

(not)함수는 인자로 1개의 조건을 받는데, 그 조건값의 반대를 반환합니다. 만약 인자가 인조건이면 nil을 반환하고, 거짓인 조건이면 T를 반환합니다.

1
2
(not T) ;nil
(not nil) ;T



실습

(if)함수의 조건에 각 논리함수들을 사용 해 보겠습니다. 사용자로부터 숫자를 입력받아서 조건에 따라서 흐름을 제어 해 봅시다.

먼저 형태는 다음과 같이 될겁니다. 알아보기 편하도록 (if)함수와 각 논리함수들은 여러줄로 나누겠습니다.

1
2
3
4
5
6
7
8
9
(progn
	(setq num (getint "메시지"))
	(if
		 조건
		 참일때실행
		 [거짓일때실행]
	)
	(princ)
)

(and)

숫자를 입력받고, 입력받은 숫자가 특정범위(10이상 20미만)에 속하는지에 따라서 다른 메시지를 출력하는 예제입니다. 복붙 해 봅시다

1
2
3
4
5
6
7
8
9
10
11
12
(progn
	(setq num (getint "\n숫자를 입력 해 주세요 : "))
	(if
		(and ;조건
			(>= num 10)
			(< num 20)
		)
		(princ "\n입력한 숫자는 10이상이고 20미만입니다.")
		(princ "\n입력한 숫자는 10미만 혹은 20이상입니다.")
	)
	(princ)
)

(or)

실행결과는 동일하지만, (and)가 아닌 (or)함수를 통해 구현해봅니다. 복붙 해 봅시다

1
2
3
4
5
6
7
8
9
10
11
12
(progn
	(setq num (getint "\n숫자를 입력 해 주세요 : "))
	(if
		(or ;조건
			(< num 10)
			(>= num 20)
		)
		(princ "\n입력한 숫자는 10미만 혹은 20이상입니다.") ;참일때실행
		(princ "\n입력한 숫자는 10이상이고 20미만입니다.") ;거짓일때실행
	)
	(princ)
)

(not)

입력받은 정수가자연수(1 이상의 정수)가 아닌경우만 메시지를 보여줍니다. 복붙 해 봅시다

1
2
3
4
5
6
7
8
(progn
	(setq num (getint "\n정수를 입력 해 주세요 : "))
	(if
		(not (>= num 1)) ;조건
		(princ "\n입력된 수는 자연수가 아닙니다.") ;참일때실행
	)
	(princ)
)

© IsaacGo. All rights reserved.