>

클래스를 정의하려면 (클래스와 객체를 구현하는 학교 프로젝트의 경우), def-class class-name parents ... 메소드로 클래스를 만들 때 프롬프트에서 이름을 지정해야합니다 .

프롬프트가 CLASS-NAME 로 답장을 보내야합니다.  클래스가 전역 변수로 저장되었다는 것을 알려줍니다 (class는 매개 변수의 목록입니다).

그래서 코드에서 다음과 같이 작성해야한다고 생각합니다 :

(defun def-class (class-name parents slot-value) 
    (defparameter X (list '(class-name parents slot-value))))

여기서 X는 CLASS-NAME 여야합니다. . 그러나 변수의 이름을 쓰려고하면 문자 그대로 코드에 쓴 단어가 나타납니다 .X가 변수라는 것을 인식하지 못하고 값을 가져야한다고 평가해야합니다.

  • 답변 # 1

    무엇을하고 싶은지 불분명합니다. 그러나 몇 가지 언급 :

    defparameter  일반적으로 전역 변수를 정의하는 최상위 양식입니다. 일반적으로 함수 내부에서는 사용되지 않습니다. 변수를 설정하려면 setf 를 사용하십시오.  또는 setq .

    defvar 가 소개 한

    변수  그리고 defparameter   *var* 로 작성해야합니다   var 가 아니라 . 이렇게하면 어휘 변수와 충돌 할 수 없습니다.

    인용 된 데이터는 평가되지 않습니다. 계산 된 값 (예 : 변수 값)을 기반으로 목록을 작성하려면 함수 list 를 사용하십시오. .

    코드 :

    (defun def-class (class-name parents slot-value) 
      (setf *x* (list (list class-name parents slot-value))))
    
    

  • 답변 # 2

    (defclass myclass ()                                                 
      ((slot-1 :initarg :slot-1 :accessor slot-1)
       (slot-2 :initarg :slot-2 :accessor slot-2)))
    ;;#<STANDARD-CLASS MYCLASS>
    (defparameter mc (make-instance 'myclass :slot-1 'a :slot-2 'b))
    ;; MC
    (slot-1 mc)
    ;; A
    (slot-2 mc)
    ;; B
    
    

관련 자료

  • 이전 servicenow - Service-Now의 스크립트에서 다른 응용 프로그램 API를 호출하는 방법
  • 다음 sql server - SQL은 특정 달 이상 발생한 레코드를 식별합니다