하기 1번이 간결하고 좋았으나, 조건식이 두가지가 되다보니 2번식을 써야 되는가 봅니다
1.if문과 2.if,and문의 차이 설명 부탁드려요
1.
(defun c:test ()
(setq a 1 b 1)
(if (= a b)
(prompt ” ; 오류: no function definition”))
(princ “n <<< ok ok >>>”) ;;본문 실행부
(princ)
)
2.
(defun c:test ()
(setq a 2 b 2)
(setq c 3 d 3)
(if (and (>= a b)(= c d))
(progn
(princ “n <<< ok ok >>>”) ;;본문 실행부
) ; end of progn
(progn
(prompt ” ; 오류: no function definition”))
) ; end of progn
) ; end of if
) ; end of defun
if는 조건식(function)이고 and는 조건문(word)입니다 (맞는 표현인지는 ㅎㅎ;;;)
보충 설명 합니다. 수야님이 설명하신 “갑” “을” 은 참값(THRU) 과 거짓값 (FALSE) 입니다.
if 문에서는 프로그램 실행이 두가지로 나뉘는데 조건문 결과값이 참값일때와 거짓일때로 나누어 집니다.
리습에서는 참값을 T로하고 거짓값을 nil로 표현 합니다.
(setq a 2 b 1) 일때 조건문 (> a b) 는 결과값이 T로 나옵니다.
즉 if문 첫번째 실행문이 실행 된다는겁니다.
(if (조건문)
(첫번째실행문)
(두번째 실행문)
)
첫번째 실행문은 조건식 (수식으로 표현 되기때문에조건문 또는조건식이라고도 함) 결과값이 참(T) 일때 실행하고 두번째 실행문은 결과식이 거짓(nil)일때 실행 합니다.
여기서 ..
실행식이 두개만 존재 해야되기 때문에 progn으로 묶어주는건 앞에서 수야님이 설명 하셨는데..
실행문이 하나면 어떻게 되느냐..
조건식이 참(T)일때만 실행 합니다.
거럼 조건식이 거짓이때만 실행할수는 없는건가요?
조건식이 (> a b) 일때는 (< a b)가 되지만 (>= a b) 일경우는 즉 a가 b보다크거나 같을경우 의 역은
(and (< a b) (/= a b)) 즉 a 가 b 보다 작고 a 와 b가 다를경우 입니다.. 복잡하죠..
이렇게 결돠값을 반대로수식을 만들어야 T가 되어서 nil 실행문을 실행할수 있습니다..실행문이 한개일경우에..
IF 문은 두개의 실행문을 실행한다 한개일경우는 조건식 결과값이 참값 (T)일경우에만 실행한다.
(>= a b) 조건식 참값은 알겠는데 거짓값 식을 만들려니 복잡하다..그럴때 쓰라고..not 함수가 있는것입니다.
(and (< a b) (/= a b)) 하고 (not (>= a b))같은겁니다.
not함수는 조건식 결과값이 T일경우 nil결과값을 나타냅니다. 당연히 nil결과값일경우 T를 나타내지요
넘 표현 많이 해주셨네요…. 논문감입니다
제가 다시 구성 해보았습니다
(defun c:test ()
(setq a 1 b 2)
(setq c 1 d 3)
(if (and (>= a b)(= c d))
(progn
(C:testL)
)
(progn
(prompt ” ; 오류: no function definition”))
)
(princ)
)
(defun c:testL ()
(setq pt1 (getpoint ” 1st Pick Point: “))
(setq pt2 (getpoint pt1 ” 2nd Pick Point: “))
(Command “Line” Pt1 Pt2 “”))
(princ)
)
수야12님이 짜신거 이제 보고 참조로 올렸습니다
메인을 조건문을 주어 만족하면 서브로 프로그램 작동하는 방식입니다
수야12또다른 방법입니다
(defun c:test (/ _MakeLine a b c d)
;; subfunction ======================
;; 이부분은 Main함수부분 조건이 안맞으면 실행이 안됩니다
(defun _MakeLine (/ pt1 pt2)
(setq pt1 (getpoint ” 1st Pick Point: “))
(setq pt2 (getpoint pt1 ” 2nd Pick Point: “))
(Command “Line” Pt1 Pt2 “”)
)
;;======================================================
;;
;; === Mainfunction ============= ;; 프로그램은 일단 이부분 부터 평가합니다..
(setq a 1 b 2)
(setq c 1 d 3)
(if(and (>= a b)(= c d));;;;; 조건문 a가 b보다 크거나 같을때 만족하고, c 와 d가 같을때 다음 명령을 실행함
(_MakeLine)
(prompt “조건을 만족하지 않습니다~!!”)
)
(princ)
)