(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は構文であり、ファーストクラスのオブジェクトではありません。オブジェクトとして参照することはできません。
ジャスティンが言ったように、マクロを作成できます。ただし、Lisp スタイルdefunは Scheme スタイルとは異なる構文を持っていることに注意してdefineください。マクロはそれを考慮に入れる必要があります。
(define-syntax-rule (defun name params body ...)
(define (name . params)
body ...))
通常の手順では、define でエイリアスできます:
(define first car) ; first isn't defined in R[67]RS
ただしdefine、defunフォーム互換性はありません。このマクロはdefun、Common Lisp のように機能するグローバルを作成します。
#!r6rs
(import (rnrs base))
(define-syntax defun
(syntax-rules ()
((defun name args . body)
(define (name . args) . body))))
definedefun主にSchemeの1つの名前空間の性質のため、Schemeではより多くのハットがあります。、、およびdefineとして機能します(ただし、以前にバインドされている場合は、更新に使用する必要があります)。labelsfletdefconstantsetqset!