2014-09-18 3 views
2

라켓 사용 키워드 (#:foo)에서 일부 기능이나 데이터 구조를 보았습니다. 그러나이를 사용하는 자체 기능을 만들 수 없었습니다. 라켓 문서는 키워드가 Symbols과 유사하다는 것을 거의 정의하지 않고, 단지 sorta를 사용하여 키워드를 매개 변수로 사용한다고 가정하면, 다음 오류가 발생합니다 : missing argument expression after keyword, 그러면 키워드가 없습니다. (따옴표가 붙지 않는 한) 값으로 전달 될 수 없다는 점에서 상징과 같은 것이 없습니다.키워드를 라켓으로 사용하는 함수를 어떻게 만드나요

나는 대부분 알고 있어요 예, 즉 키워드를 사용 match입니다 :

(...  
    (match foo 
    [n #:when (< 10 n) "foo is greater than 10"] 
    [_ "undefined"])) 

그래서 내 질문은 : 어떻게 기능을 못하거나 그에서 같은 키워드를 가지고 할 수있는 무엇이든 위의 예?

+0

http://docs.racket-lang.org/guide/lambda.html – uselpa

답변

4

예를 들어, 절차의 매개 변수 정의의 일부로 키워드를 선언 : 코멘트에 언급 @uselpa으로

(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) 

, 여기에 documentation의 관련 부분입니다.

+0

의 4.4.3을 참조하십시오. 그렇다면 키워드를 선택적으로 설정하려면 어떻게해야합니까? –

+2

'# : comparator [cmp <]'는'<'의 기본값을 가진 선택적 키워드로'cmp'를 지정합니다 – Jack