2012년 12월 25일 화요일

[LISP-GSJ] FuncList.lsp (포스트아이디 : 2104168976269955871)



;;=========================================================================================================
;;=========================================================================================================
;;=========================================================================================================
(defun C:FuncList()
 (princ "\FuncList")
 (princ)
)
;;=========================================================================================================
;;=========================================================================================================
;; 리스트내 중복 지우기
;;=========================================================================================================
(defun Func_RemoveItem(dORGList / dORGList dRTNList dItem)
 (foreach dItem dORGList
  (if (null (member dItem dRTNList))
   (setq dRTNList (append dRTNList (list dItem)))
  )
 )
 dRTNList
)
;;=========================================================================================================
;;=========================================================================================================
;; 삭제할 위치의 Index 번호와 List를 전달하면 인덱스 번호에 해당하는 요소가 삭제된 List를 리턴한다.
;; (setq TestList (list 1 2 3 4 5 6 7 8 9 0))
;; (setq TestList (RemoveNTH 2 TestList)) -> TestList = (1 2 4 5 6 7 8 9 0)
;;=========================================================================================================
(defun Func_RemoveNTH(lIndex lList / lIndex lList lCHNum x)
 (setq lCHNum -1)
 (apply 'append (mapcar '(lambda (x) (if (/= (setq lCHNum (1+ lCHNum)) lIndex) (list x))) lList))
)
;;=========================================================================================================
;;=========================================================================================================
;; 변경될 위치의 Index 번호와 List, 새로운 요소를 전달하면 인덱스 번호에 해당하는 요소가 변경된 List를 리턴한다.
;; (SwitchNTH [Index 번호] [변경할 List] [새로운 요소])
;; (setq TestList (list 1 2 3 4 5 6 7 8 9 0))
;; (setq TestList (SwitchNTH 0 TestList "TEST")) -> TestList = ("TEST" 2 4 5 6 7 8 9 0)
;;=========================================================================================================
(defun Func_SwitchNTH(lIndex lList lData / lIndex lList lData lCHNum x)
 (setq lCHNum -1)
 (apply 'append (mapcar '(lambda (x) (if (= (setq lCHNum (1+ lCHNum)) lIndex) (list lData) (list x))) lList))
)
;;=========================================================================================================
;;=========================================================================================================
;; List 내의 최대 확장 Box구하기
;;=========================================================================================================
(defun Func_GetExtent(dPTList / dPTList dMaxX dMaxY dMinX dMinY dAtom)
 (setq dMaxX (caar dPTList))
 (setq dMaxY (cadar dPTList))
 (setq dMinX dMaxX )
 (setq dMinY dMaxY)
 (foreach dAtom (cdr dPTList)
  (setq dMaxX (max dMaxX (car dAtom)))
  (setq dMaxY (max dMaxY (cadr dAtom)))
  (setq dMinX (min dMinX (car dAtom)))
  (setq dMinY (min dMinY (cadr dAtom)))
 )
 (list (list dMinX dMinY) (list dMaxX dMaxY))
)

;;=========================================================================================================
;;=========================================================================================================
;; 숫자로 이루어진 List에서 가장 길이가 긴 요소의 길이를 리턴한다.
;; (Func_MaxLengthNumberList 리스트 소수점자릿수)
;; (Func_MaxLengthNumberList (list 12 15.4 10.74 11) 3)
;;=========================================================================================================
(defun Func_MaxLengthNumberList(dNumberList dPlacesFlag / dNumberList dPlacesFlag dMaxLength )  ;; 리스트, 소수점 자리수
   (setq dMaxLength 0)
   (repeat (length dNumberList)
           (if (< dMaxLength (strlen (rtos (car dNumberList) 2 dPlacesFlag)))
               (setq dMaxLength (strlen (rtos (car dNumberList) 2 dPlacesFlag)))
           )
           (setq dNumberList (cdr dNumberList))
   )
   dMaxLength
)
;;=========================================================================================================
;;=========================================================================================================
;; String 으로 이루어진 List에서 가장 길이가 긴 String의 길이를 리턴한다.
;;=========================================================================================================
(defun Func_MaxLengthStringList(dStringList / dStringList dMaxLength )
   (setq dMaxLength 0)
   (repeat (length dStringList)
           (if (< dMaxLength (strlen (car dStringList)))
               (setq dMaxLength (strlen (car dStringList)))
           )
           (setq dStringList (cdr dStringList))
   )
   dMaxLength
)
;;=========================================================================================================
;;=========================================================================================================
;; List를 전달받아 모두 합한 수를 반환한다.
;;=========================================================================================================
(defun Func_ListSum(lList / lList lListSum)
   (setq lListSum 0.0)
   (repeat (length lList)
           (setq lListSum (+ lListSum (car lList)))
           (setq lList (cdr lList))
   )
   lListSum
)

;;=========================================================================================================
;;=========================================================================================================
;;=========================================================================================================

댓글 없음:

댓글 쓰기

즐거운 하루되세요...^^