비밀번호를 잊으셨나요?

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

계정이 있나요? 로그인

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 113722
다음
진행 중
Lv.0
등록일: 2022-04-102022-04-10T11:36:04+09:00 2022-04-10T11:36:04+09:00카테고리: AutoCAD & CADian

lisp 코드 해석을 부탁드립니다. 코드가 잘 이해가 가지 않습니다.

삽입 정렬 코드입니다.

이 코드를 잘 이해해야 제가 손수 코드를 작성할 수 있는데, 
대강은 이해가 가지만 자세한 작동 원리나 논리가 궁금합니다.
아래는 코드입니다.
(defun insert (item lst &optional (i #'<))
;insert라는 이름의 함수를 정의한다.
;&optional은 뒤의 값을 optional로 설정한다.
;선택전 매개변수를 지정하는 것이다.
;함수에 옵션변수를 넣기 위해서는 &optional (변수명 디폴트값)을 이용한다.
;insert함수에서 item값과 lst값은 있어야 하지만 그 뒤의 값은 optional하다.
  (if (null lst) 
    (list item)
    (if (funcall i item (car lst))
          (cons item lst) 
          (cons (car lst) (insert item (cdr lst) i)))))
;cons 함수는 원소와 리스트를 취하고 그 원소를 첫 번째 요소로 포함시킨 새로운 리스트를 만들어준다.
;funcall은 (funcall fn a1 a2……an)은 인자 
; a1,a2,an으로 함수 fn에 제공한다.
(defun insertionsort (lst &optional (i #'<))
;여기서도.lst의 값을 제외하면 뒤의 값은 옵셔널하다.
  (if (null lst) ;lst가 비어 있다면 
    lst
    (insert (car lst) (insertionsort (cdr lst) i) i))
    )
    ;이 때, 재귀를 쓴다. item 항목은 (lst)의 첫번째 부분이다.
;car 함수는 첫번째 내용을 보여주는 것이고
;cdr 함수는 처음 것을 제외한 것을 보여준다.
;#’ 은 그냥 ‘와 비슷한 놈인데, function val과 같은 의미이다.
(print(insertionsort ‘(1 4 2 4 5 1 3 0)))
:출력 시 0 1 1 2 3 4 4 5 가 나옴.
  • 0
  • 1 1 답변
  • 110 조회
공유
  • Facebook

    관련 있는 질문들

    • 동적블록 신축에서 길이를 늘릴때 최종 길이를 입력 또는 늘려야 하는 차이만큼의 길이를 입력
    • 캐드 타일 개수 구하기
    • 캐드 선택할 때 마우스 옆에 박스안 초록동그라미, 파란동그라미 표시 어떻게 없애나요?
    • 캐드 용량이 16.8MB 인데 10MB 이하로 줄이고 싶습니다

    1 답변

    • 작성 순
    • 최신 순
    • 공감 순
    1. aalan
    2. 수야12 Lv.21
      2022-04-11T11:57:55+09:00답변 등록 답변 등록 일시 2022-04-11 11:57 am
      (defun insert (item lst &optional (i #'<)) ;메인 함수로 부터 item,lst,i를 제공 받는다 &optional함수에 i값과 오름차순 옵션을 전달하여 그값을 받던지 제공만 하던지 한다
        (if (null lst) ;빈 리스트면 
          (list item) ;아이템을 리스트화 한다 
          (if (funcall i item (car lst));funcall함수에 i,item,lst의 첫번째 값을 넘긴후 그값이 참인지 거짓인지에 따라 밑의 작업을 한다 
                (cons item lst) ;값이 참일경우 
                (cons (car lst) (insert item (cdr lst) i));값이 거짓일 경우
          )
        )
      )
      (defun insertionsort (lst &optional (i #'<))
        (if (null lst) ;lst가 비어 있다면 
          lst ;빈값 그대로 메임함수로 전달 
          (insert (car lst) (insertionsort (cdr lst) i) i);재귀함수 lst가 빈 리스트가 될때까지 insertionsort 함수 호출 
        )
       )
      (print(insertionsort ‘(1 4 2 4 5 1 3 0)))
      (PRINC)
      )
      ;함수 느낌상 (전체적인 함수를 전부 본게 아니라서) 리스트중 중복된거 원소 제거후 오름차순 정리 함수 같음. 
      • 0
      • 공유
        공유
        • 공유 Facebook
        • 공유 Twitter

    Sidebar

    질문하기
    공지사항

    • 국산 CAD ‘캐디안 2025’ 출시 사전 예약 진행 2024-09-27

    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