我已经在球拍使用关键字(#:foo
)中看到了一些功能或数据结构,但我还没有能够召唤出自己的功能来使用它们。球拍文档只是松散地定义了关键字与符号类似,而sorta只是将其留在那里,但是编写一个应该将关键字作为参数的函数只会导致以下错误:missing argument expression after keyword
这让我相信关键词并不像符号一样,因为它们不能作为值传递(除非引用)。
我最熟悉的使用关键字的示例是match
:
(...
(match foo
[n #:when (< 10 n) "foo is greater than 10"]
[_ "undefined"]))
所以我的问题是:如何创建一个函数或任何能够获取关键字的函数,如上例所示?
答案 0 :(得分:4)
将关键字声明为过程参数定义的一部分,例如:
(define (my-sort lst #:reverse reversed? #:comparator cmp)
(if reversed?
(reverse (sort lst cmp))
(sort lst cmp)))
(my-sort '(1 5 2 3 4) #:comparator > #:reverse #t)
=> '(1 2 3 4 5)
(my-sort '(1 5 2 3 4) #:reverse #f #:comparator >)
=> '(5 4 3 2 1)
正如@uselpa在评论中提到的,这是documentation中的相关部分。