如上所述,#(...)
形式Clojure是只为(fn ...)
的速记语法,这就是所谓在球拍(lambda ...)
。如果你希望它更短,你也可以使用(λ ...)
,DrRacket实际上有一个插入λ
字符的快捷方式。
使用λ
,你的代码应该是这样的:
(define (target-data)
(map (λ (x) (vector x (+ (* x x) x 1)))
(range -1.0 1.0 0.1)))
如果你想的Clojure般的简写,#lang racket
不支持这样的事情开箱即用,但球拍非常灵活,将其添加为阅读器宏。有几个不同的包实现了类似Clojure的函数速记,其中包括我写的一个名为curly-fn
的包,它与Clojure速记非常相似。
要使用它,首先安装curly-fn
包:
raco pkg install curly-fn
然后加入curly-fn
作为一个“元语言”,在你的文件的顶部:
#lang curly-fn racket
这将延长racket
语言与功能简写,看起来像这样:
#{vector % (+ (* % %) % 1)}
值得注意的是,它与Clojure语法几乎相同,但由于#(...)
已经在球拍中用于矢量文字,因此curly-fn
改为使用#{...}
。因此,你的程序应该是这样的:
(define (target-data)
(map #{vector % (+ (* % %) % 1)}
(range -1.0 1.0 0.1)))
由于curly-fn
是一种元语言,也可以与使用S-表达式语法任何其他语言的使用,如#lang curly-fn racket/base
甚至#lang curly-fn typed/racket
。
的curly-fn
速记也比Clojure的更灵活一点等效值得注意的是,它也可以作为一个简单的简写curry
如果没有参数的使用,你可以找到在the package documentation所有的细节。
我会建议描述Clojure代码和语法对于只知道球拍而不知道Clojure的人来说。也可以标记球拍问题方案。 –
表示,Clojure中的'#(...)'是lambda的快捷方式,而scheme * does *有lambda表达式。 –