如上所述,#(...)
形式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表達式。 –