그래서 목록에서 마지막 요소를 제거해야합니다. 예를 들어 목록이 있다고 가정 해 봅시다. (1 2 3 4)입니다. 나는 반환해야합니다 (1 2 3)
내 생각 : reverse(list)
car(list)
reverse(list)
계획 (라켓)에서 reverse 기능이 있습니까?
연습으로 중첩 단항으로 let*의 소스 코드를 나타내는 문자열을 다시 작성하려고합니다. 여기 내 최선의 노력입니다 :이 `(let* ((,<var> ,<val>) ,<clauses>) ,<exprs>)
이 같은 문자열과 일치하지 않습니다 : (define let*→nested-unary-lets
(match-lambda
(`(let*
보다 기본적인 함수로 특정 함수를 다시 쓰기 위해 match-lambda를 사용하고 있습니다. 여기 (define let*→nested-unary-lets
(match-lambda
(`(let* (()) ,<exprs>)
`(let() ,<exprs>))
(`(let* ((,<var> ,<val>)) ,<exprs>)
필자는 match-lambda를 사용하는 annotate라는 함수를 작성하는데, 종종 annotate에 대한 재귀 호출을 사용한다. 다음은 패턴 일치 중 하나입니다. (`(lambda (,<param1> . ,<params>) ,<stmts>)
`(CLOSURE ENV (,<param1> . ,<params>) `(lambda (ENV) ,(ma
필자는 annotate에 대한 재귀 호출과 함께 종종 match-lambda를 사용하는 함수 annotate를 작성하고있다. 다음은 패턴 및 일치 중 하나입니다. (`(,<param> . ,<params> (lambda (,<args>) ,<stmt> . ,<stmts>))
`(CLOSURE ENV ,(append (append `(,<param>) `(
match-lambda를 사용하여 상당히 복잡한 패턴 일치를 시도하고 있습니다. 그러나 패턴과 일치에 대한 구문을 해독하는 데 많은 어려움을 겪고 있으며 인터넷 검색으로 괜찮은 참조를 찾지 못했습니다. 이 패턴을 사용하여 : (`(PARAMS: (,<arg>))
<match>
는하지만이 작동하지 않습니다 간단되어야한다 보인다 한 가지는 문자열 '((Y
정의 일치 확장에 대해서는 개념을 설명하기위한 희귀 자료와 예제 코드가 있습니다. 나는 힘든 시간이 문서의 말씀 "디코딩"하는 데 : 경기 확장기에 (define-match-expander id proc-expr)
(define-match-expander id proc-expr proc-expr)
귀속 ID를. 첫 번째 proc-expr 서브 표현식은
구조체 작업 : (struct Binding (id (value #:mutable)))
이 구조체 것은 내가 아이디 = x와 값 = 3 을 기대하는 곳과 같은 (set! x 3) 바인딩 변수를 나타냅니다 이 구조체를 만들고 초기화하려면 어떻게해야합니까? id과 value의 값을 얻고 value 값을 설정하려면 어떻게해야합니까?