비밀번호를 잊으셨나요?

비밀번호를 잊으셨나요? 비밀번호를 재설정하려면 이메일 주소를 입력해주세요.

계정이 있나요? 로그인

You must login to ask a question.

비밀번호를 잊으셨나요?

아직 계정이 없으신가요? 회원가입 하기

해당 질문을 신고하는 이유를 간단히 입력해주세요.

해당 답변을 신고하는 이유를 간단히 입력해주세요.

해당 유저를 신고하는 이유를 간단히 입력해주세요.

로그인회원가입

고캐드 – 캐드(CAD) 정보의 중심

고캐드 – 캐드(CAD) 정보의 중심 Logo 고캐드 – 캐드(CAD) 정보의 중심 Logo

고캐드 – 캐드(CAD) 정보의 중심 Navigation

  • Q&A
    • AutoCAD & CADian
    • Inventor & Solidworks
    • Revit & ArchiCAD
    • 자유질문
    • 기타
  • 커뮤니티
    • 오늘의이슈
    • 자유게시판
    • 익명게시판
    • 건의게시판
  • 자료실
    • 자료요청
    • 일반파일
    • 도면샘플
    • 유틸리티
    • 기타
  • 작품 갤러리
    • 그래픽
    • 캐드도면
    • 3D모델
    • 기타
  • 뉴스&이벤트
    • 공지사항
    • 뉴스
    • 전시/행사
    • 이벤트
    • 기타
검색
질문하기

Mobile menu

닫기
질문하기
  • 홈
  • 카테고리
    • AutoCAD & CADian
    • Inventor & Solidworks
    • Revit & ArchiCAD
    • 자유질문
    • 기타
  • 투표
  • 커뮤니티 그룹
  • Q&A
    • AutoCAD & CADian
    • Inventor & Solidworks
    • Revit & ArchiCAD
    • 자유질문
    • 기타
  • 커뮤니티
    • 오늘의이슈
    • 자유게시판
    • 익명게시판
    • 건의게시판
  • 자료실
    • 자료요청
    • 일반파일
    • 도면샘플
    • 유틸리티
    • 기타
  • 작품 갤러리
    • 그래픽
    • 캐드도면
    • 3D모델
    • 기타
  • 뉴스&이벤트
    • 공지사항
    • 뉴스
    • 전시/행사
    • 이벤트
    • 기타
홈/ 질문/Q 104065
다음
진행 중
Lv.0
등록일: 2015-05-112015-05-11T10:29:06+09:00 2015-05-11T10:29:06+09:00카테고리: AutoCAD & CADian

리습에서 처음보는 함수가 있어서 간단한 해석 부탁드립니다ㅠ

(defun c:zx ( / *error* sel val var el )  

  (defun *error* ( msg )
        (mapcar ‘(lambda ( a b ) (if b (setvar a b))) var val)
        (LM:endundo (LM:acdoc))
        (if (and msg (not (wcmatch (strcase msg t) “*break,*cancel*,*exit*”)))
            (princ (strcat “nError: ” msg))
        )
        (princ)
    )


이중에서 mapcar, lambda함수를 처음봐서… 질문 드립니다…
무슨 기능을 하는 함수인가요?

그리고 (LM:endundo (LM:acdoc)) <-이 문장은 함수가 아니라 변수라고 뜨는데,

맨 윗줄에 변수선언 할 때도 지정이 안되어있는데,  이 변수는 어디에 쓰이는 변수인가요?

리습 고수님들 답변 부탁드립니다..

  • 0
  • 2 2 답변
  • 46 조회
공유
  • Facebook

    관련 있는 질문들

    • mvsetup 및 align 안됨
    • mvsetup 및 align 안됨
    • 에어컨 실외기 도면
    • cad에서 기준점 복사 후 다른 파일에 붙여넣기 시 블록참조객체의 길이가 줄어들어있어요

    2 답변

    • 작성 순
    • 최신 순
    • 공감 순
    1. aalan
    2. [Deleted User]
      2015-05-11T10:33:51+09:00답변 등록 답변 등록 일시 2015-05-11 10:33 am

      혹시 몰라 리습 전체 올려 드립니다.

      (defun c:cc ( / *error* sel val var )
         
          (defun *error* ( msg )
              (mapcar ‘(lambda ( a b ) (if b (setvar a b))) var val)
              (LM:endundo (LM:acdoc))
              (if (and msg (not (wcmatch (strcase msg t) “*break,*cancel*,*exit*”)))
                  (princ (strcat “nError: ” msg))
              )
              (princ)
          )

          (LM:startundo (LM:acdoc))
          (if
              (setq sel
                  (LM:ssget “nSelect : “
                     ‘(    “_:L”
                          (
                              (-4 . “<OR”)
                                   (0 . “LINE”)
                                   (-4 . “<AND”)
                                       (0 . “LWPOLYLINE”)
                                       (-4 . “<NOT”)
                                           (-4 . “&=”) (70 . 1)
                                       (-4 . “NOT>”)
                                   (-4 . “AND>”)
                               (-4 . “OR>”)
                          )
                      )
                  )
              )
              (progn
                  (setq var ‘(cmdecho peditaccept)
                        val  (mapcar ‘getvar var)
                  )
                  (mapcar ‘(lambda ( a b c ) (if a (setvar b c))) val var ‘(0 1))
                  (command “_.pedit” “_m” sel “” “_j” “” “_c” “” “”)
              )
          )
          (*error* nil)
          (princ)
      )

      • 0
      • 공유
        공유
        • 공유 Facebook
        • 공유 Twitter
    3. xcsh Lv.0
      2015-05-11T12:01:30+09:00답변 등록 답변 등록 일시 2015-05-11 12:01 pm

      기본 함수들이라 도음말을 보시면 대부분 알 수 있습니다.
      mapcar는 리스트에 연산규칙을 적용시킨다고 이해하시면 됩니다.

      예를 들어 +함수는 여러 숫자를   합하는 함수입니다. 
      (+ 숫자1 숫자2 숫자3)과  같은 방식 이죠
      숫자를 대입하여 (+ 1 2 3)으로 해보시면  결과는 6이 나오게 됩니다

      mapcar는 이러한 연산을 리스트를 대상으로 적용하는 것입니다.
      (mapcar ‘+  리스트1  리스트2  리스트3 ) 와  같은 방식이 됩니다.
      숫자를 대입해 보면  (mapcar  ‘+  ‘( 1  11   21 )  ‘( 2  12   22 )   ‘( 3  13   23 ) )

      말하자면  (list  (+ 1 2 3)  (+ 11 12 13) (+ 21 22 23)) 과 같은 것이 됩니다.
      정말 편리한 기능이죠.

      하지만 사용을 위해서는 연산이 적용되는 범위를 정확히 인지해야 합니다.
      예를 들면  1+ 와 같은 증가 함수는 하나의 숫자를 대상으로 하게되므로
      (1+ 1 2 3) 이렇게 쓰면 안되고   (1+ 1) 하나의 숫자만 되므로
       
      1+ 함수는 mapcar를 적용하면 하나의 리스트만 써야 합니다.
       (mapcar  ‘1+  ‘( 1  2  3 )  ) 은  (list  (1+ 1) (1+ 2) (1+ 3)) 과 같은 방식이라고 보시면 됩니다.

      그리고   lambda 는  사용자가  함수를 정의해서 사용하는 것입니다.
       lambda 로 정의한 연산을 mapcar로  리스트에 적용한것 뿐입니다.

      올리신 부분의  (mapcar       ‘(lambda ( a b ) (if b (setvar a b)))            var       val  ) 을 보시면 
      lambda ( a b ) 에서 a b 두 값이 필요한 것으로    정의 했고
      사용법은(if b (setvar a b)) 로 b값이 존재하면 a에 b값을 세팅하는것으로 되어있으니
      결국 var는 변수명 리스트이고 val은 변수값 리스트라는 것을 알 수 있습니다.

      • 0
      • 공유
        공유
        • 공유 Facebook
        • 공유 Twitter

    Sidebar

    질문하기
    공지사항

    • AI CAD의 미래! 캐디안 2025 1+1 프로모션 안내 2025-05-14

    Adv 234x60

    aalan

    Adv 234x60

    aalan

    Adv 120x600

    aalan

    Explore

    • 홈
    • 카테고리
      • AutoCAD & CADian
      • Inventor & Solidworks
      • Revit & ArchiCAD
      • 자유질문
      • 기타
    • 투표
    • 커뮤니티 그룹
    aalan

    Footer

    Support

    • 회사 및 서비스 소개
    • 자주 묻는 질문
    • 문의하기

    Guide

    • 제휴/협업 안내
    • 광고 서비스 안내

    Policy

    • 서비스 이용약관
    • 개인정보 처리방침
    • 광고성 정보 수신 동의

    Contents

    • 고밍스토리
    • 리습 시리즈

    정소프트 | 사업자등록번호 : 677-40-00198 | 대표 : 정은숙 | 이메일 : gocad.manager@gmail.com
    주소 : 서울특별시 강서구 양천로 400-12, 6층 614,615,617호(등촌동, 더리브골드타워)
    Copyright. 2012-2024 GOCAD All rights reserved