새로운 표현 체계 언어에 대한 지원 추가

마스터 하함

나는 신입이다. 나는 곧 시험, 시험 언어 체계를 가지게되며 준비하고 있습니다.

몇 시간 동안 해결하려고하지만 시작하는 방법도 이해하지 못하는 질문이 있습니다.

질문은 다음과 같습니다.

이 형식의 새로운 표현이 있습니다.

(get-procedure-body <exp>)

이 식은 단일 식을 인수로 받아 평가하고 사용자 프로 시저 유형 값을 얻으면 Her 본문을 반환합니다.

계획 언어의 질문

안녕하세요 여러분, 여기 새로 왔어요. 곧 시험이 있고 언어 시험이 있고 준비 중입니다. 몇 시간 동안 해결하려고하지만 시작하는 방법도 이해하지 못하는 질문이 있습니다.

질문은 다음과 같습니다.이 형식의 새로운 표현이 있습니다.

이 식은 단일 식을 인수로 받아 평가하고 사용자 프로 시저 유형 값을 얻으면 Her 본문을 반환합니다.

다음은 재평가 후 가능한 경우입니다.

  • 반환 된 값이 사용자 프로 시저 인 경우 해당 본문을 반환해야합니다.
  • 반환 된 값이 기본 프로 시저 인 경우-“숨겨진 구현! 원어"
  • 값이 프로 시저가 아닌 경우 "procedure-non : error"를 인쇄하십시오.

기능 작동의 가능한 출력 :

(get-procedure-body f)
> ((display x) (* x y))
(get-procedure-body (lambda (x) (h x)) )
> ((h x))
(get-procedure-body +)
> “primitive! Implementation hidden”
(get-procedure-body 1)
> “error: non-procedure”
(get-procedure-body (+ 1 1))
> “error: non-procedure”

질문은 다음과 같습니다.

body-procedure-get 표현식에 대한 지원을 커널 표현식으로 추가 (필요한 모든 변경 사항 작성)

누군가가 적어도 나를 도울 수 있다면 기쁠 것입니다. 나는 나 자신을 설명하려고 노력했습니다. 명확하지 않은 것이 있으면 더 설명하겠습니다. 이것은 특히 많은 지원이 없기 때문에 어려운 언어입니다.

나는 무엇을해야할지조차 알 수 없었다.

새해 전날

프로 시저의 본문을 가져 오는 것은 Scheme의 일부가 아니며 Common Lisp 표준이 아닙니다. 그러나 eval사용자 프로 시저를 지원 하는 Scheme 인터프리터 ( )를 만든 경우 선택한 데이터 구조에 문제의 코드가 있고 비표준으로 만들 가능성이 높습니다. 프리미티브 get-procedure-body는 호스트 언어에서 동일한 절차를 노출합니다. 예 : SICP 책에는 통역사의 일부로 매우 유사한 이름이 있습니다.

Racket 사용에 관해서는 한 번 비슷한 일을 할 수 있도록 만들었습니다.

#lang racket

(struct proc (src obj)
  #:property prop:procedure
  (struct-field-index obj)
  #:transparent
  #:methods gen:custom-write
  [(define (write-proc x port mode)
     ((case mode
        [(#t) write]
        [(#f) display]
        [else pretty-print])
      (proc-src x)
      port))])

(define-syntax lambda*
  (syntax-rules ()
    ((_ . rest)
     (proc '(lambda* . rest) (lambda . rest)))))

(define test (lambda* (x y) (+ x y)))

test                  ; ==> #(struct:closure (lambda* (x y) (+ x y)) #<procedure>)
(proc-src test)       ; ==> (lambda* (x y) (+ x y))
(proc-obj test)       ; ==> #<procedure>
((proc-obj test) 1 2) ; ==> 3
(test 1 2)            ; ==> 3

이제이 솔루션은 문제를 거꾸로 뒤집습니다. 시스템에서 소스를 가져올 방법이 없기 때문에 프로 시저 개체와 함께 소스를 저장하는 구문을 만들고 구조체 기능을 사용하여 패키지화합니다. 절차 는 introspection을 제외하고는 lambda*동일하게 작동합니다 lambda.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

오류 : 프로젝션 표현식 또는 집계가있는 테이블에 대한 액세스가 지원되지 않습니다.

분류에서Dev

내 결과가 계속 합산됩니다. 새로운 선택을 할 때마다 현재 결과를 새 결과로 어떻게 대체합니까?

분류에서Dev

마지막 빈 개체에 대해 새로 추가 버튼 표시

분류에서Dev

표현식에서 언어 객체로

분류에서Dev

Liferay에 새로운 언어 추가

분류에서Dev

날짜 및 중복 값에 대한 새로운 관찰 추가

분류에서Dev

Quill.js가 링크에 대한 추가 URL 체계를 지원하도록하려면 어떻게해야합니까?

분류에서Dev

자바 잠금에 대한 새로운 객체 대 새로운 클래스

분류에서Dev

"필터링 된"합계를 표시하는 사용자 정의 표현식에 대한 추가 행

분류에서Dev

Spring Boot Admin에서 KubernetesDiscoveryClient에 대한 Spring 표현식 언어 필터 지정

분류에서Dev

"둘 이상의 객체 표현을 가진 객체"에 대한 지정되지 않은 동작

분류에서Dev

어떻게지도 및 점검 상태 후 배열에 새로운 개체를 추가합니다

분류에서Dev

태그가 지정된 콘텐츠에 대한 새로운 Instagram API 제한에 대한 해결 방법

분류에서Dev

데이터베이스의 모든 JSON 개체에 대한 새로운 Google지도 마커에 대한 루프

분류에서Dev

계층 적 개체가있는 MVVM에 대한 참조 구현

분류에서Dev

접기 표현식에 대한 GCC 7 C ++ 17 지원

분류에서Dev

여러 Angular ng-class 표현식에 대한 IE 지원

분류에서Dev

전체 경로에 대한 정규식 표현

분류에서Dev

원본에 X가 포함 된 경우 한 단어로 대체

분류에서Dev

tx_news 현지화-공통 필드를 원래 언어로 대체하는 방법은 무엇입니까?

분류에서Dev

새로운 기능 (시간 및 객체에 대한 행에 대한주기)의 계산 속도 향상

분류에서Dev

새로운 라인의 수와 주석을 대체하는 정규 표현식

분류에서Dev

VBA의 새로운 기능. 차트에 계열을 추가하려면 매크로에 대한 도움이 필요합니다.

분류에서Dev

My OS에 언어 지원 추가

분류에서Dev

Liferay 테마에 언어 지원 추가

분류에서Dev

sloccount에 언어 지원 추가

분류에서Dev

"전체 표현을 평가하는 마지막 단계로 임시 객체가 파괴됩니다"를 이해하는 방법은 무엇입니까? 간단한 예를 들어 누구든지 명확히 할 수 있습니까?

분류에서Dev

Windows 8에서는 영어가 표시 언어로 표시되지 않습니다. 사용 가능한 다운로드 옵션이 없습니다.

분류에서Dev

추가 된 새로운 관계형 필드가 DjangoRestFramework API에 나타나지 않습니다.

Related 관련 기사

  1. 1

    오류 : 프로젝션 표현식 또는 집계가있는 테이블에 대한 액세스가 지원되지 않습니다.

  2. 2

    내 결과가 계속 합산됩니다. 새로운 선택을 할 때마다 현재 결과를 새 결과로 어떻게 대체합니까?

  3. 3

    마지막 빈 개체에 대해 새로 추가 버튼 표시

  4. 4

    표현식에서 언어 객체로

  5. 5

    Liferay에 새로운 언어 추가

  6. 6

    날짜 및 중복 값에 대한 새로운 관찰 추가

  7. 7

    Quill.js가 링크에 대한 추가 URL 체계를 지원하도록하려면 어떻게해야합니까?

  8. 8

    자바 잠금에 대한 새로운 객체 대 새로운 클래스

  9. 9

    "필터링 된"합계를 표시하는 사용자 정의 표현식에 대한 추가 행

  10. 10

    Spring Boot Admin에서 KubernetesDiscoveryClient에 대한 Spring 표현식 언어 필터 지정

  11. 11

    "둘 이상의 객체 표현을 가진 객체"에 대한 지정되지 않은 동작

  12. 12

    어떻게지도 및 점검 상태 후 배열에 새로운 개체를 추가합니다

  13. 13

    태그가 지정된 콘텐츠에 대한 새로운 Instagram API 제한에 대한 해결 방법

  14. 14

    데이터베이스의 모든 JSON 개체에 대한 새로운 Google지도 마커에 대한 루프

  15. 15

    계층 적 개체가있는 MVVM에 대한 참조 구현

  16. 16

    접기 표현식에 대한 GCC 7 C ++ 17 지원

  17. 17

    여러 Angular ng-class 표현식에 대한 IE 지원

  18. 18

    전체 경로에 대한 정규식 표현

  19. 19

    원본에 X가 포함 된 경우 한 단어로 대체

  20. 20

    tx_news 현지화-공통 필드를 원래 언어로 대체하는 방법은 무엇입니까?

  21. 21

    새로운 기능 (시간 및 객체에 대한 행에 대한주기)의 계산 속도 향상

  22. 22

    새로운 라인의 수와 주석을 대체하는 정규 표현식

  23. 23

    VBA의 새로운 기능. 차트에 계열을 추가하려면 매크로에 대한 도움이 필요합니다.

  24. 24

    My OS에 언어 지원 추가

  25. 25

    Liferay 테마에 언어 지원 추가

  26. 26

    sloccount에 언어 지원 추가

  27. 27

    "전체 표현을 평가하는 마지막 단계로 임시 객체가 파괴됩니다"를 이해하는 방법은 무엇입니까? 간단한 예를 들어 누구든지 명확히 할 수 있습니까?

  28. 28

    Windows 8에서는 영어가 표시 언어로 표시되지 않습니다. 사용 가능한 다운로드 옵션이 없습니다.

  29. 29

    추가 된 새로운 관계형 필드가 DjangoRestFramework API에 나타나지 않습니다.

뜨겁다태그

보관