(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))))
define
defun
主にSchemeの1つの名前空間の性質のため、Schemeではより多くのハットがあります。、、およびdefine
として機能します(ただし、以前にバインドされている場合は、更新に使用する必要があります)。labels
flet
defconstant
setq
set!