(define defun define)
define: not allowed in an expression context in: define它会在 Racket 中引发错误。如何为define, let,等基本结构创建别名lambda?
(define defun define)
define: not allowed in an expression context in: define它会在 Racket 中引发错误。如何为define, let,等基本结构创建别名lambda?
define是一种语法,而不是一流的对象。您不能将其称为对象。
正如贾斯汀所说,您可以创建一个宏。但请注意,Lisp 风格defun与 Scheme-style 有不同的语法define,你的宏应该考虑到这一点:
(define-syntax-rule (defun name params body ...)
(define (name . params)
body ...))
具体不确定 Racket,但更普遍的问题是在 Scheme 中define,let并且lambda是语法和/或特殊形式而不是函数。因此,如果将它们定义为函数,则不能像在表达式上下文中那样引用它们。
但是,您可以定义一个defun扩展为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))))
definein Scheme 比 有更多的帽子defun,主要是因为 Scheme 的单一命名空间性质。define用作labels, flet, defconstantand setq(但对于以前绑定的,需要使用set!更新)。