LISP-패키지

프로그래밍 언어의 일반적인 용어에서 패키지는 한 세트의 이름을 다른 세트와 분리하는 방법을 제공하도록 설계되었습니다. 한 패키지에서 선언 된 기호는 다른 패키지에서 선언 된 동일한 기호와 충돌하지 않습니다. 이러한 방식으로 패키지는 독립 코드 모듈 간의 이름 충돌을 줄입니다.

LISP 판독기는 발견 한 모든 기호의 표를 유지합니다. 새 문자 시퀀스를 찾으면 새 기호를 만들고 기호 테이블에 저장합니다. 이 테이블을 패키지라고합니다.

현재 패키지는 특수 변수 * package *에 의해 참조됩니다.

LISP에는 두 개의 미리 정의 된 패키지가 있습니다.

  • common-lisp − 정의 된 모든 기능과 변수에 대한 기호를 포함합니다.

  • common-lisp-user− 편집 및 디버깅 도구와 함께 common-lisp 패키지 및 기타 모든 패키지를 사용합니다. 간단히 cl-user라고합니다.

LISP의 패키지 기능

다음 표는 패키지 생성, 사용 및 조작에 가장 일반적으로 사용되는 함수를 제공합니다.

Sr. 아니. 기능 및 설명
1

make-package 패키지 이름 및 키 : 닉네임 : 사용

지정된 패키지 이름으로 새 패키지를 만들고 반환합니다.

2

in-package 패키지 이름 및 키 : 닉네임 : 사용

패키지를 최신 상태로 만듭니다.

in-package 이름

이 매크로를 사용하면 * package *가 기호 또는 문자열이어야하는 name 패키지로 설정됩니다.

4

find-package 이름

패키지를 검색합니다. 해당 이름 또는 별명이있는 패키지가 리턴됩니다. 그러한 패키지가 없으면 find-package는 nil을 반환합니다.

5

rename-package 패키지 새 이름 및 선택적 새 별명

패키지 이름을 바꿉니다.

6

list-all-packages

이 함수는 현재 Lisp 시스템에있는 모든 패키지 목록을 반환합니다.

7

delete-package 꾸러미

패키지를 삭제합니다.

LISP 패키지 생성

그만큼 defpackage함수는 사용자 정의 패키지를 만드는 데 사용됩니다. 다음과 같은 구문이 있습니다.

(defpackage :package-name
   (:use :common-lisp ...)
   (:export :symbol1 :symbol2 ...)
)

어디,

  • package-name은 패키지의 이름입니다.

  • : use 키워드는이 패키지에 필요한 패키지, 즉이 패키지의 코드에서 사용하는 함수를 정의하는 패키지를 지정합니다.

  • : export 키워드는이 패키지의 외부 기호를 지정합니다.

그만큼 make-package함수는 패키지 생성에도 사용됩니다. 이 함수의 구문은 다음과 같습니다.

make-package package-name &key :nicknames :use

인수와 키워드는 이전과 동일한 의미를 갖습니다.

패키지 사용

패키지를 만든 후에는 현재 패키지로 만들어이 패키지의 코드를 사용할 수 있습니다. 그만큼in-package 매크로는 패키지를 환경에서 최신 상태로 만듭니다.

main.lisp라는 새 소스 코드 파일을 만들고 그 안에 다음 코드를 입력합니다.

(make-package :tom)
(make-package :dick)
(make-package :harry)
(in-package tom)
(defun hello () 
   (write-line "Hello! This is Tom's Tutorials Point")
)

(hello)
(in-package dick)
(defun hello () 
   (write-line "Hello! This is Dick's Tutorials Point")
)

(hello)
(in-package harry)
(defun hello () 
   (write-line "Hello! This is Harry's Tutorials Point")
)

(hello)
(in-package tom)
(hello)
(in-package dick)
(hello)
(in-package harry)
(hello)

코드를 실행하면 다음 결과가 반환됩니다.

Hello! This is Tom's Tutorials Point
Hello! This is Dick's Tutorials Point
Hello! This is Harry's Tutorials Point

패키지 삭제

그만큼 delete-package매크로를 사용하면 패키지를 삭제할 수 있습니다. 다음 예제는 이것을 보여줍니다-

main.lisp라는 새 소스 코드 파일을 만들고 그 안에 다음 코드를 입력합니다.

(make-package :tom)
(make-package :dick)
(make-package :harry)
(in-package tom)
(defun hello () 
   (write-line "Hello! This is Tom's Tutorials Point")
)

(in-package dick)
(defun hello () 
   (write-line "Hello! This is Dick's Tutorials Point")
)

(in-package harry)
(defun hello () 
   (write-line "Hello! This is Harry's Tutorials Point")
)

(in-package tom)
(hello)
(in-package dick)
(hello)
(in-package harry)
(hello)
(delete-package tom)
(in-package tom)
(hello)

코드를 실행하면 다음 결과가 반환됩니다.

Hello! This is Tom's Tutorials Point
Hello! This is Dick's Tutorials Point
Hello! This is Harry's Tutorials Point
*** - EVAL: variable TOM has no value