(define defun define)
라켓에 오류가 발생했습니다. define: not allowed in an expression context in: define
. define
, let
, lambda
과 같은 기본 구문에 대한 별칭을 만드는 방법은 무엇입니까?키워드 별명
(define defun define)
라켓에 오류가 발생했습니다. define: not allowed in an expression context in: define
. define
, let
, lambda
과 같은 기본 구문에 대한 별칭을 만드는 방법은 무엇입니까?키워드 별명
define
은 1 급 개체가 아닌 구문입니다. 객체로 참조 할 수는 없습니다.
저스틴이 말했듯이 매크로를 만들 수 있습니다. 그러나 리스프 스타일 defun
이 제도 스타일 define
에 다른 구문을 가지고 있으며, 매크로 계정에이 소요됩니다 참고 : 정상적인 절차와
(define-syntax-rule (defun name params body ...)
(define (name . params)
body ...))
라켓에 대해 명확히 알지 못하지만보다 일반적인 문제는 스키마 define
에서 let
및 lambda
은 기능이 아니라 구문 및/또는 특수 형식입니다. 따라서 함수로 정의 된 경우 표현식 컨텍스트에서 참조 할 수 없습니다.
대신에 define
표현식으로 확장되는 defun
매크로를 정의 할 수 있습니다.
을 당신과 함께 별칭을 정의 할 수 있습니다 :
(define first car) ; first isn't defined in R[67]RS
그러나 define
을 defun
은 호환되지 않습니다. 이 매크로는 커먼 리스프에서와 같이 작동하는 글로벌 defun
것 : 계획에서
#!r6rs
(import (rnrs base))
(define-syntax defun
(syntax-rules()
((defun name args . body)
(define (name . args) . body))))
define
대부분 때문에 제도의 한 네임 스페이스 특성, defun
보다 더 많은 모자를 가지고있다. define
은 labels
, flet
, defconstant
및 setq
으로 작동합니다 (단, 이전에 바인딩 한 경우 set!
을 업데이트해야 함).